Merge commit '019ab88a95cb31b698506d90e8ce56695a7f1cc5'
authorJames Almer <jamrial@gmail.com>
Mon, 8 May 2017 16:11:17 +0000 (13:11 -0300)
committerJames Almer <jamrial@gmail.com>
Mon, 8 May 2017 17:22:43 +0000 (14:22 -0300)
* commit '019ab88a95cb31b698506d90e8ce56695a7f1cc5':
  lavc: add an option for exporting cropping information to the caller

Merged-by: James Almer <jamrial@gmail.com>
1  2 
doc/APIchanges
libavcodec/avcodec.h
libavcodec/decode.c
libavcodec/internal.h
libavcodec/options_table.h
libavcodec/version.h
tests/ref/fate/api-mjpeg-codec-param
tests/ref/fate/api-png-codec-param

diff --combined doc/APIchanges
@@@ -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,646 -7,342 +7,650 @@@ 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 - xxxxxxx - lavc 57.31.0 - avcodec.h
++2017-xx-xx - xxxxxxx - lavc 57.95.100 / 57.31.0 - avcodec.h
+   Add AVCodecContext.apply_cropping to control whether cropping
+   is handled by libavcodec or the caller.
 -2016-xx-xx - xxxxxxx - lavu 55.30.0 - frame.h
 +2017-xx-xx - xxxxxxx - lavu 55.62.100 / 55.30.0 - frame.h
    Add AVFrame.crop_left/right/top/bottom fields for attaching cropping
    information to video frames.
  
 -2016-xx-xx - xxxxxxx
 -  Change av_sha_update() and av_md5_sum()/av_md5_update() length
 +2017-xx-xx - xxxxxxxxxx
 +  Change av_sha_update(), av_sha512_update() and av_md5_sum()/av_md5_update() length
    parameter type to size_t at next major bump.
  
 -2016-xx-xx - xxxxxxx - lavc 57.29.0 - avcodec.h
 -  Add AV_PKT_DATA_SPHERICAL packet side data to export AVSphericalMapping
 -  information from containers.
 +2017-05-05 - xxxxxxxxxx - lavc 57.94.100 - avcodec.h
 +  The cuvid decoders now support AVCodecContext.hw_device_ctx, which removes
 +  the requirement to set an incomplete AVCodecContext.hw_frames_ctx only to
 +  set the Cuda device handle.
  
 -2016-xx-xx - xxxxxxx - lavu 55.30.0 - spherical.h
 -  Add AV_FRAME_DATA_SPHERICAL value, av_spherical_alloc() API and
 -  AVSphericalMapping type to export and describe spherical video properties.
 +2017-04-11 - 8378466507 - lavu 55.61.100 - avstring.h
 +  Add av_strireplace().
  
 -2016-xx-xx - xxxxxxx - lavf 57.10.0 - avformat.h
 -  Add av_stream_add_side_data().
 +2016-04-06 - 157e57a181 - lavc 57.92.100 - avcodec.h
 +  Add AV_PKT_DATA_CONTENT_LIGHT_LEVEL packet side data.
  
 -2016-xx-xx - xxxxxxx - lavu 55.28.0 - pixfmt.h
 -  Add AV_PIX_FMT_GRAY12(LE/BE).
 +2016-04-06 - b378f5bd64 - lavu 55.60.100 - mastering_display_metadata.h
 +  Add AV_FRAME_DATA_CONTENT_LIGHT_LEVEL value, av_content_light_metadata_alloc()
 +  and av_content_light_metadata_create_side_data() API, and AVContentLightMetadata
 +  type to export content light level video properties.
 +
 +2017-03-31 - 9033e8723c - lavu 55.57.100 - spherical.h
 +  Add av_spherical_projection_name().
 +  Add av_spherical_from_name().
  
 -2016-xx-xx - xxxxxxx - lavu 55.27.0 - hwcontext.h
 +2017-03-30 - 4cda23f1f1 - lavu 55.53.100 / 55.27.0 - hwcontext.h
    Add av_hwframe_map() and associated AV_HWFRAME_MAP_* flags.
    Add av_hwframe_ctx_create_derived().
  
 -2016-xx-xx - xxxxxxx - lavu 55.25.0 - pixfmt.h
 -  Add AV_PIX_FMT_GBRAP12(LE/BE).
 +2017-03-29 - bfdcdd6d82 - lavu 55.52.100 - avutil.h
 +  add av_fourcc_make_string() function and av_fourcc2str() macro to replace
 +  av_get_codec_tag_string() from lavc.
  
 -2016-xx-xx - xxxxxxx - lavu 55.24.0 - pixfmt.h
 -  Add AV_PIX_FMT_GBRP12(LE/BE).
 +2017-03-27 - ddef3d902f - lavf 57.68.100 - avformat.h
 +  Deprecate that demuxers export the stream rotation angle in AVStream.metadata
 +  (via an entry named "rotate"). Use av_stream_get_side_data() with
 +  AV_PKT_DATA_DISPLAYMATRIX instead, and read the rotation angle with
 +  av_display_rotation_get(). The same is done for muxing. Instead of adding a
 +  "rotate" entry to AVStream.metadata, AV_PKT_DATA_DISPLAYMATRIX side data has
 +  to be added to the AVStream.
  
 -2016-xx-xx - xxxxxxx - lavu 55.23.0 - hwcontext_vaapi.h
 -  Add AV_VAAPI_DRIVER_QUIRK_ATTRIB_MEMTYPE.
 +2017-03-23 - 7e4ba776a2 - lavc 57.85.101 - avcodec.h
 +  vdpau hardware accelerated decoding now supports the new hwaccel API, which
 +  can create the decoder context and allocate hardware frame automatically.
 +  See AVCodecContext.hw_device_ctx and AVCodecContext.hw_frames_ctx.
  
 -2016-xx-xx - xxxxxxx - lavf 57.08.0 - avio.h
 -  Add AVIO_SEEKABLE_TIME flag.
 +2017-03-23 - 156bd8278f - lavc 57.85.100 - avcodec.h
 +  Add AVCodecContext.hwaccel_flags field. This will control some hwaccels at
 +  a later point.
  
 -2016-xx-xx - xxxxxxx - lavu 55.22.0 - pixfmt.h
 -  Add AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV422P12, and AV_PIX_FMT_YUV444P12.
 +2017-03-21 - fc9f14c7de - lavf 57.67.100 / 57.08.0 - avio.h
 +  Add AVIO_SEEKABLE_TIME flag.
  
 -2016-xx-xx - xxxxxxx - lavc 57.27.0 - avcodec.h
 -  Add FF_PROFILE_HEVC_REXT, the extended pixel format profile for HEVC.
 +2017-03-21 - d682ae70b4 - lavf 57.66.105, lavc 57.83.101 - avformat.h, avcodec.h
 +  Deprecate AVFMT_FLAG_KEEP_SIDE_DATA. It will be ignored after the next major
 +  bump, and libavformat will behave as if it were always set.
 +  Deprecate av_packet_merge_side_data() and av_packet_split_side_data().
  
 -2016-08-24 - xxxxxxx - lavu 55.21.0 - imgutils.h
 +2016-03-20 - 8200b16a9c - lavu 55.50.100 / 55.21.0 - imgutils.h
    Add av_image_copy_uc_from(), a version of av_image_copy() for copying
    from GPU mapped memory.
  
 -2016-xx-xx - xxxxxxx - lavc 59.26.0 - vaapi.h
 +2017-03-20 - 9c2436e - lavu 55.49.100 - pixdesc.h
 +  Add AV_PIX_FMT_FLAG_BAYER pixel format flag.
 +
 +2017-03-18 - 3796fb2692 - lavfi 6.77.100 - avfilter.h
 +  Deprecate AVFilterGraph.resample_lavr_opts
 +  It's never been used by avfilter nor passed to anything.
 +
 +2017-02-10 - 1b7ffddb3a - lavu 55.48.100 / 55.33.0 - spherical.h
 +  Add AV_SPHERICAL_EQUIRECTANGULAR_TILE, av_spherical_tile_bounds(),
 +  and projection-specific properties (bound_left, bound_top, bound_right,
 +  bound_bottom, padding) to AVSphericalMapping.
 +
 +2017-03-02 - ade7c1a232 - lavc 57.81.104 - videotoolbox.h
 +  AVVideotoolboxContext.cv_pix_fmt_type can now be set to 0 to output the
 +  native decoder format. (The default value is not changed.)
 +
 +2017-03-02 - 554bc4eea8 - lavu 55.47.101, lavc 57.81.102, lavf 57.66.103
 +  Remove requirement to use AVOption or accessors to access certain fields
 +  in AVFrame, AVCodecContext, and AVFormatContext that were previously
 +  documented as "no direct access" allowed.
 +
 +2017-02-13 - c1a5fca06f - lavc 57.80.100 - avcodec.h
 +  Add AVCodecContext.hw_device_ctx.
 +
 +2017-02-11 - e3af49b14b - lavu 55.47.100 - frame.h
 +  Add AVFrame.opaque_ref.
 +
 +2017-01-31 - 2eab48177d - lavu 55.46.100 / 55.20.0 - cpu.h
 +  Add AV_CPU_FLAG_SSSE3SLOW.
 +
 +2017-01-24 - c4618f842a - lavu 55.45.100 - channel_layout.h
 +  Add av_get_extended_channel_layout()
 +
 +2017-01-22 - 76c5a69e26 - lavu 55.44.100 - lfg.h
 +  Add av_lfg_init_from_data().
 +
 +2017-01-17 - 2a4a8653b6 - lavc 57.74.100 - vaapi.h
    Deprecate struct vaapi_context and the vaapi.h installed header.
    Callers should set AVCodecContext.hw_frames_ctx instead.
  
 -------------------------------8<-------------------------------------
 -                   12 branch was cut here
 ------------------------------>8--------------------------------------
 +2017-01-12 - dbe9dbed31 - lavfi 6.69.100 - buffersink.h
 +  Add av_buffersink_get_*() functions.
  
 -2016-07-20 - xxxxxxx - lavu 55.20.0 - cpu.h
 -  Add AV_CPU_FLAG_SSSE3SLOW.
 +2017-01-06 - 9488032e10 - lavf 57.62.100 - avio.h
 +  Add avio_get_dyn_buf()
 +
 +2016-12-10 - f542b152aa - lavu 55.43.100 - imgutils.h
 +  Add av_image_check_size2()
 +
 +2016-12-07 - e7a6f8c972 - lavc 57.67.100 / 57.29.0 - avcodec.h
 +  Add AV_PKT_DATA_SPHERICAL packet side data to export AVSphericalMapping
 +  information from containers.
 +
 +2016-12-07 - 8f58ecc344 - lavu 55.42.100 / 55.30.0 - spherical.h
 +  Add AV_FRAME_DATA_SPHERICAL value, av_spherical_alloc() API and
 +  AVSphericalMapping type to export and describe spherical video properties.
 +
 +2016-11-18 - 2ab50647ff - lavf 57.58.100 - avformat.h
 +  Add av_stream_add_side_data().
 +
 +2016-11-13 - 775a8477b7 - lavu 55.39.100 - hwcontext_vaapi.h
 +  Add AV_VAAPI_DRIVER_QUIRK_ATTRIB_MEMTYPE.
  
 -2016-07-02 - 4926fa9 - lavu 55.19.0 - hwcontext_vaapi.h
 +2016-11-13 - a8d51bb424 - lavu 55.38.100 - hwcontext_vaapi.h
    Add driver quirks field to VAAPI-specific hwdevice and enum with
    members AV_VAAPI_DRIVER_QUIRK_* to represent its values.
  
 -2016-07-02 - b7c5f88 - lavu 55.18.0 - pixfmt.h
 -  Add AV_PIX_FMT_P010(LE/BE).
 +2016-11-10 - 638b216d4f - lavu 55.36.100 - pixfmt.h
 +  Add AV_PIX_FMT_GRAY12(LE/BE).
 +
 +-------- 8< --------- FFmpeg 3.2 was cut here -------- 8< ---------
  
 -2016-06-21 - 32c8359 - lavc 57.24.0 - avcodec.h
 +2016-10-24 - 73ead47 - lavf 57.55.100 - avformat.h
 +  Add AV_DISPOSITION_TIMED_THUMBNAILS
 +
 +2016-10-24 - a246fef - lavf 57.54.100 - avformat.h
 +  Add avformat_init_output() and AVSTREAM_INIT_IN_ macros
 +
 +2016-10-22 - f5495c9 - lavu 55.33.100 - avassert.h
 +  Add av_assert0_fpu() / av_assert2_fpu()
 +
 +2016-10-07 - 3f9137c / 32c8359 - lavc 57.61.100 / 57.24.0 - avcodec.h
    Decoders now export the frame timestamp as AVFrame.pts. It was
    previously exported as AVFrame.pkt_pts, which is now deprecated.
  
 -2016-06-21 - 59e7361 - lavu 55.16.0 - hwcontext.h hwcontext_qsv.h
 +  Note: When decoding, AVFrame.pts uses the stream/packet timebase,
 +  and not the codec timebase.
 +
 +2016-09-28 - eba0414 - lavu 55.32.100 / 55.16.0 - hwcontext.h hwcontext_qsv.h
    Add AV_HWDEVICE_TYPE_QSV and a new installed header with QSV-specific
    hwcontext definitions.
  
 -2016-06-21 - e85f6f7 - lavc 57.23.0 - avcodec.h
 +2016-09-26 - 32c25f0 - lavc 57.59.100 / 57.23.0 - avcodec.h
    AVCodecContext.hw_frames_ctx now may be used by decoders.
  
 -2016-06-12 - 90f469a - lavc 57.20.0 - avcodec.h
 +2016-09-27 - f0b6f72 - lavf 57.51.100 - avformat.h
 +  Add av_stream_get_codec_timebase()
 +
 +2016-09-27 - 23c0779 - lswr 2.2.100 - swresample.h
 +  Add swr_build_matrix().
 +
 +2016-09-23 - 30d3e36 - lavc 57.58.100 - avcodec.h
 +  Add AV_CODEC_CAP_AVOID_PROBING codec capability flag.
 +
 +2016-09-14 - ae1dd0c - lavf 57.49.100 - avformat.h
 +  Add avformat_transfer_internal_stream_timing_info helper to help with stream
 +  copy.
 +
 +2016-08-29 - 4493390 - lavfi 6.58.100 - avfilter.h
 +  Add AVFilterContext.nb_threads.
 +
 +2016-08-15 - c3c4c72 - lavc 57.53.100 - avcodec.h
 +  Add trailing_padding to AVCodecContext to match the corresponding
 +  field in AVCodecParameters.
 +
 +2016-08-15 - b746ed7 - lavc 57.52.100 - avcodec.h
 +  Add a new API for chained BSF filters and passthrough (null) BSF --
 +  av_bsf_list_alloc(), av_bsf_list_free(), av_bsf_list_append(),
 +  av_bsf_list_append2(), av_bsf_list_finalize(), av_bsf_list_parse_str()
 +  and av_bsf_get_null_filter().
 +
 +2016-08-04 - 82a33c8 - lavf 57.46.100 - avformat.h
 +  Add av_get_frame_filename2()
 +
 +2016-07-09 - 775389f / 90f469a - lavc 57.50.100 / 57.20.0 - avcodec.h
    Add FF_PROFILE_H264_MULTIVIEW_HIGH and FF_PROFILE_H264_STEREO_HIGH.
  
 -2016-05-26 - 1c9e861 - lavu 55.13.0 - hwcontext.h
 +2016-06-30 - c1c7e0ab - lavf 57.41.100 - avformat.h
 +  Moved codecpar field from AVStream to the end of the struct, so that
 +  the following private fields are in the same location as in FFmpeg 3.0 (lavf 57.25.100).
 +
 +2016-06-30 - 042fb69d - lavu 55.28.100 - frame.h
 +  Moved hw_frames_ctx field from AVFrame to the end of the struct, so that
 +  the following private fields are in the same location as in FFmpeg 3.0 (lavu 55.17.103).
 +
 +2016-06-29 - 1a751455 - lavfi 6.47.100 - avfilter.h
 +  Fix accidental ABI breakage in AVFilterContext.
 +  ABI was broken in 8688d3a, lavfi 6.42.100 and released as ffmpeg 3.1.
 +
 +  Because of this, ffmpeg and ffplay built against lavfi>=6.42.100 will not be
 +  compatible with lavfi>=6.47.100. Potentially also affects other users of
 +  libavfilter if they are using one of the affected fields.
 +
 +-------- 8< --------- FFmpeg 3.1 was cut here -------- 8< ---------
 +
 +2016-06-26 - 481f320 / 1c9e861 - lavu 55.27.100 / 55.13.0 - hwcontext.h
    Add av_hwdevice_ctx_create().
  
 -2016-05-24 - ad61da05 - lavc 57.19.1 - avcodec.h
 +2016-06-26 - b95534b / e47b8bb - lavc 57.48.101 / 57.19.1 - avcodec.h
    Adjust values for JPEG 2000 profiles.
  
 -2016-05-18 - db7968b - lavf 57.7.0 - avio.h
 +2016-06-23 - 5d75e46 / db7968b - lavf 57.40.100 / 57.7.0 - avio.h
    Add AVIODataMarkerType, write_data_type, ignore_boundary_point and
    avio_write_marker.
  
 -2016-05-17 - 0c4468d - lavu 55.12.0 - opt.h
 +2016-06-23 - abb3cc4 / 0c4468d - lavu 55.26.100 / 55.12.0 - opt.h
    Add av_stereo3d_type_name() and av_stereo3d_from_name().
  
 -2016-05-17 - c46db38 - lavu 55.11.0 - hwcontext_dxva2.h
 +2016-06-22 - 3689efe / c46db38 - lavu 55.25.100 / 55.11.0 - hwcontext_dxva2.h
    Add new installed header with DXVA2-specific hwcontext definitions.
  
 -2016-03-24 - 564b459 - lavu 55.10.0 - opt.h
 -  Add av_opt_copy().
 +2016-04-27 - fb91871 - lavu 55.23.100 - log.h
 +  Add a new function av_log_format_line2() which returns number of bytes
 +  written to the target buffer.
  
 -2016-03-23 - 05f6670 - lavc 57.16.0 - avcodec.h
 +2016-04-21 - 7fc329e - lavc 57.37.100 - avcodec.h
    Add a new audio/video encoding and decoding API with decoupled input
    and output -- avcodec_send_packet(), avcodec_receive_frame(),
    avcodec_send_frame() and avcodec_receive_packet().
  
 -2016-03-20 - 33d1898 - lavc 57.15.0 - avcodec.h
 +2016-04-17 - af9cac1 / 33d1898 - lavc 57.35.100 / 57.15.0 - avcodec.h
    Add a new bitstream filtering API working with AVPackets.
    Deprecate the old bitstream filtering API.
  
 -2016-03-19 - 07a844f - lavfi 6.3.0 - avfilter.h
 +2016-04-14 - 8688d3a / 07a844f - lavfi 6.42.100 / 6.3.0 - avfilter.h
    Add AVFilterContext.hw_device_ctx.
  
 -2016-03-19 - 551c677 - lavu 55.9.0 - hwcontext_vaapi.h
 +2016-04-14 - 28abb21 / 551c677 - lavu 55.22.100 / 55.9.0 - hwcontext_vaapi.h
    Add new installed header with VAAPI-specific hwcontext definitions.
  
 -2016-03-19 - d264c72 - lavu 55.8.0 - pixfmt.h
 -  Deprecate all AV_PIX_FMT_VAAPI_* formats.
 -  Replaced by AV_PIX_FMT_VAAPI.
 -
 -2016-03-19 - b1f01e8 - lavu 55.7.0 - hwcontext.h
 +2016-04-14 - afccfaf / b1f01e8 - lavu 55.21.100 / 55.7.0 - hwcontext.h
    Add AVHWFramesConstraints and associated API.
  
 -2016-02-23 - 9200514 - lavf 57.5.0 - avformat.h
 +2016-04-11 - 6f69f7a / 9200514 - lavf 57.33.100 / 57.5.0 - avformat.h
    Add AVStream.codecpar, deprecate AVStream.codec.
  
 -2016-02-23 - lavc 57.14.0 - avcodec.h
 -  998e1b8 - Add AVCodecParameters and its related API.
 -  a806834 - Add av_get_audio_frame_duration2().
 +2016-04-02 - e8a9b64 - lavu 55.20.100 - base64.h
 +  Add AV_BASE64_DECODE_SIZE(x) macro.
 +
 +2016-xx-xx - lavc 57.33.100 / 57.14.0 - avcodec.h
 +  f9b1cf1 / 998e1b8 - Add AVCodecParameters and its related API.
 +  e6053b3 / a806834 - Add av_get_audio_frame_duration2().
 +
 +2016-03-11 - 6d8ab35 - 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-03-04 - 9362973 - lavf 57.28.100
 +  Add protocol blacklisting API
 +
 +2016-02-28 - 4dd4d53 - 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-02-26 - 30e7685 - 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-02-26 - 2941282 - 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-02-24 - 7e49cdd / 7b3214d0 - lavc 57.25.100 / 57.13.0 - avcodec.h
 +  Add AVCodecContext.hw_frames_ctx.
  
 -2016-02-22 - ec4c483 - 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-02-24 - 1042402 / b3dd30d - lavfi 6.36.100 / 6.2.0 - avfilter.h
 +  avfilter.h - Add AVFilterLink.hw_frames_ctx.
 +  buffersrc.h - Add AVBufferSrcParameters and functions for handling it.
  
 -2016-02-14 - 7b3214d0 - lavc 57.13.0 - avcodec.h
 -  Add AVCodecContext.hw_frames_ctx.
 +2016-02-23 - 14f7a3d - lavc 57.25.100
 +  Add AV_PKT_DATA_MPEGTS_STREAM_ID for exporting the MPEGTS stream ID.
  
 -2016-02-14 - lavfi 6.2.0 - avfilter.h
 -  b3dd30d avfilter.h - Add AVFilterLink.hw_frames_ctx.
 -          buffersrc.h - Add AVBufferSrcParameters and functions for handling it.
 +2016-02-18 - 08acab8 - lavu 55.18.100 - audio_fifo.h
 +  Add av_audio_fifo_peek_at().
  
 -2016-02-14 - lavu 55.6.0
 -  721a4ef buffer.h - Add av_buffer_pool_init2().
 -  89923e4 hwcontext.h - Add a new installed header hwcontext.h with a new API
 +2016-xx-xx - lavu 55.18.100 / 55.6.0
 +  26abd51 / 721a4ef buffer.h - Add av_buffer_pool_init2().
 +  1a70878 / 89923e4 hwcontext.h - Add a new installed header hwcontext.h with a new API
                          for handling hwaccel frames.
 -  ad884d1 hwcontext_cuda.h - Add a new installed header hwcontext_cuda.h with
 +  6992276 / ad884d1 hwcontext_cuda.h - Add a new installed header hwcontext_cuda.h with
                               CUDA-specific hwcontext definitions.
 -  a001ce3 hwcontext_vdpau.h - Add a new installed header hwcontext_vdpau.h with
 +  d779d8d / a001ce3 hwcontext_vdpau.h - Add a new installed header hwcontext_vdpau.h with
                                VDPAU-specific hwcontext definitions.
 -  7bc780c pixfmt.h - Add AV_PIX_FMT_CUDA.
 +  63c3e35 / 7bc780c pixfmt.h - Add AV_PIX_FMT_CUDA.
  
 -2016-01-24 - 9f61abc - 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-12-12 - 2c68113 - 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-12-06 - lavc 57.11.0 - avcodec.h dirac.h
 -  31c51f7 - Add av_packet_add_side_data().
 -  84adab3 - Add AVCodecContext.coded_side_data.
 -  f0b769c - Add AVCPBProperties API.
 -  e02de9d - Add a new public header dirac.h containing
 +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-11-20 - 462a54e - 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-18 - 79ae1e6 - 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-18 - 7f4ec43 - lavf 57.1.0 - avformat.h
 +2015-11-22 - ad317c9 - lavf 57.19.100 - avformat.h
    Add av_stream_new_side_data().
  
 -2015-11-13 - 92d107a - 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-09 - 48ff668 - 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-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.
 +           Use av_packet_ref() to make a non-refcounted AVPacket refcounted.
 +  xxxxxx - Add av_packet_alloc(), av_packet_clone(), av_packet_free().
 +           They match the AVFrame functions with the same name.
  
 -2015-10-26 - lavc 57.7.0 - avcodec.h
 -  ce70f28 - Deprecate av_free_packet(). Use av_packet_unref() as replacement,
 -            it resets the packet in a more consistent way.
 -  9b56d5c - Deprecate av_dup_packet(), it is a no-op for most cases.
 -            Use av_packet_ref() to make a non-refcounted AVPacket refcounted.
 -  a9a6010 - Add av_packet_alloc(), av_packet_clone(), av_packet_free().
 -            They match the AVFrame functions with the same name.
 +2015-10-27 - 1e477a9 - lavu 55.5.100 - cpu.h
 +  Add AV_CPU_FLAG_AESNI.
  
 -2015-10-21 - a17a766 - lavc 57.5.0 - avcodec.h
 +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-10-16 - dc923bc - 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-10-12 - 11c5f43 - 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
  
 -2014-12-25 - c220a60 - lavc 56.10.0 - vdpau.h
 +2015-01-11 - 007c33d - lavd 56.4.100 - avdevice.h
 +  Add avdevice_list_input_sources().
 +  Add avdevice_list_output_sinks().
 +
 +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-10-24 - 1bd0bdc - lavu 54.5.0 - time.h
 -  Add av_gettime_relative().
 +2014-11-16 - 6690d4c3 - lavf 56.13.100 - avformat.h
 +  Add AVStream.recommended_encoder_configuration with accessors.
  
 -2014-10-15 - 7ea1b34 - lavc 56.5.0 - avcodec.h
 +2014-11-16 - bee5844d - lavu 54.13.100 - opt.h
 +  Add av_opt_serialize().
 +
 +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.
 +
 +2014-10-02 - 0d92b0d - lavu 54.8.100 - avstring.h
 +  Add av_match_list()
 +
 +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< ---------
  
 -------------------------------8<-------------------------------------
 -                   11 branch 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 - 9301486 - lavc 56.1.0 - avcodec.h
 +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-11 - b9fb59d,9431356,d7b3ee9 - lavc 55.28.1 - avcodec.h
 +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 - 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 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.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-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-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.10.100 / 54.8.0
 +  f095391 / 6699d07 Add av_get_exact_bits_per_sample()
 +  f095391 / 9524cf7 Add av_get_audio_frame_duration()
  
 -2012-03-05 - lavc 54.8.0
 -  6699d07 Add av_get_exact_bits_per_sample()
 -  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<-------------------------------------
 -                   0.7 branch was cut here
 ------------------------------>8--------------------------------------
  
 -2011-06-16 - 05e84c9, 25de595 - lavf 53.2.0 - avformat.h
 +-------- 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.
 +
 +2011-06-19 - 44f669e - lavfi 2.21.0 - vsink_buffer.h
 +  Add video sink buffer and vsink_buffer.h public header.
 +
 +2011-06-12 - 9fdf772 - lavfi 2.18.0 - avcodec.h
 +  Add avfilter_get_video_buffer_ref_from_frame() function in
 +  libavfilter/avcodec.h.
 +
 +2011-06-12 - c535494 - lavfi 2.17.0 - avfiltergraph.h
 +  Add avfilter_inout_alloc() and avfilter_inout_free() functions.
 +
 +2011-06-12 - 6119b23 - lavfi 2.16.0 - avfilter_graph_parse()
 +  Change avfilter_graph_parse() signature.
 +
 +2011-06-23 - 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
@@@ -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
 + * @defgroup libavc libavcodec
 + * Encoding/Decoding Library
 + *
   * @{
   *
   * @defgroup lavc_decoding Decoding
@@@ -89,7 -91,7 +89,7 @@@
   * - Send valid input:
   *   - For decoding, call avcodec_send_packet() to give the decoder raw
   *     compressed data in an AVPacket.
 - *   - For encoding, call avcodec_send_frame() to give the decoder an AVFrame
 + *   - For encoding, call avcodec_send_frame() to give the encoder an AVFrame
   *     containing uncompressed audio or video.
   *   In both cases, it is recommended that AVPackets and AVFrames are
   *   refcounted, or libavcodec might have to copy the input data. (libavformat
   * are filled. This situation is handled transparently if you follow the steps
   * outlined above.
   *
 + * In theory, sending input can result in EAGAIN - this should happen only if
 + * not all output was received. You can use this to structure alternative decode
 + * or encode loops other than the one suggested above. For example, you could
 + * try sending new input on each iteration, and try to receive output if that
 + * returns EAGAIN.
 + *
   * End of stream situations. These require "flushing" (aka draining) the codec,
   * as the codec might buffer multiple frames or packets internally for
   * performance or out of necessity (consider B-frames).
   *
   * Not all codecs will follow a rigid and predictable dataflow; the only
   * guarantee is that an AVERROR(EAGAIN) return value on a send/receive call on
 - * one end implies that a receive/send call on the other end will succeed. In
 - * general, no codec will permit unlimited buffering of input or output.
 + * one end implies that a receive/send call on the other end will succeed, or
 + * at least will not fail with AVERROR(EAGAIN). In general, no codec will
 + * permit unlimited buffering of input or output.
   *
   * This API replaces the following legacy functions:
   * - avcodec_decode_video2() and avcodec_decode_audio4():
   *   Unlike with the old video decoding API, multiple frames might result from
   *   a packet. For audio, splitting the input packet into frames by partially
   *   decoding packets becomes transparent to the API user. You never need to
 - *   feed an AVPacket to the API twice.
 + *   feed an AVPacket to the API twice (unless it is rejected with AVERROR(EAGAIN) - then
 + *   no data was read from the packet).
   *   Additionally, sending a flush/draining packet is required only once.
   * - avcodec_encode_video2()/avcodec_encode_audio2():
   *   Use avcodec_send_frame() to feed input to the encoder, then use
   * - The new API does not handle subtitles yet.
   *
   * Mixing new and old function calls on the same AVCodecContext is not allowed,
 - * and will result in arbitrary behavior.
 + * and will result in undefined behavior.
   *
   * Some codecs might require using the new API; using the old API will return
 - * an error when calling it.
 + * an error when calling it. All codecs support the new API.
 + *
 + * A codec is not allowed to return AVERROR(EAGAIN) for both sending and receiving. This
 + * would be an invalid state, which could put the codec user into an endless
 + * loop. The API has no concept of time either: it cannot happen that trying to
 + * do avcodec_send_packet() results in AVERROR(EAGAIN), but a repeated call 1 second
 + * later accepts the packet (with no other receive/flush API calls involved).
 + * The API is a strict state machine, and the passage of time is not supposed
 + * to influence it. Some timing-dependent behavior might still be deemed
 + * acceptable in certain cases. But it must never result in both send/receive
 + * returning EAGAIN at the same time at any point. It must also absolutely be
 + * avoided that the current state is "unstable" and can "flip-flop" between
 + * the send/receive APIs allowing progress. For example, it's not allowed that
 + * the codec randomly decides that it actually wants to consume a packet now
 + * instead of returning a frame, after it just returned AVERROR(EAGAIN) on an
 + * avcodec_send_packet() call.
   * @}
   */
  
   * 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.
@@@ -354,7 -333,7 +354,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_DXV,
      AV_CODEC_ID_SCREENPRESSO,
      AV_CODEC_ID_RSCC,
 -    AV_CODEC_ID_MAGICYUV,
 +
 +    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,
      AV_CODEC_ID_TRUEMOTION2RT,
 +    AV_CODEC_ID_M101,
 +    AV_CODEC_ID_MAGICYUV,
 +    AV_CODEC_ID_SHEERVIDEO,
 +    AV_CODEC_ID_YLC,
 +    AV_CODEC_ID_PSD,
 +    AV_CODEC_ID_PIXLET,
 +    AV_CODEC_ID_SPEEDHQ,
 +    AV_CODEC_ID_FMVC,
 +    AV_CODEC_ID_SCPR,
 +    AV_CODEC_ID_CLEARVIDEO,
 +    AV_CODEC_ID_XPM,
      AV_CODEC_ID_AV1,
 +    AV_CODEC_ID_BITPACKED,
 +    AV_CODEC_ID_MSCC,
 +    AV_CODEC_ID_SRGC,
  
      /* various PCM "codecs" */
      AV_CODEC_ID_FIRST_AUDIO = 0x10000,     ///< A dummy id pointing at the start of audio codecs
      AV_CODEC_ID_PCM_S32LE_PLANAR,
      AV_CODEC_ID_PCM_S16BE_PLANAR,
  
 +    AV_CODEC_ID_PCM_S64LE = 0x10800,
 +    AV_CODEC_ID_PCM_S64BE,
 +    AV_CODEC_ID_PCM_F16LE,
 +    AV_CODEC_ID_PCM_F24LE,
 +
      /* various ADPCM codecs */
      AV_CODEC_ID_ADPCM_IMA_QT = 0x11000,
      AV_CODEC_ID_ADPCM_IMA_WAV,
      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,
 +    AV_CODEC_ID_ADPCM_IMA_DAT4,
 +    AV_CODEC_ID_ADPCM_MTAF,
  
      /* 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,
 +    AV_CODEC_ID_DST,
 +    AV_CODEC_ID_ATRAC3AL,
 +    AV_CODEC_ID_ATRAC3PAL,
 +
      /* 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_SCTE_35, ///< Contain timestamp estimated through PCR of program stream.
 +    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
@@@ -713,12 -595,6 +713,12 @@@ typedef struct AVCodecDescriptor 
       */
      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.
       */
  
  /**
   * Codec uses only intra compression.
 - * Video codecs only.
 + * Video and audio codecs only.
   */
  #define AV_CODEC_PROP_INTRA_ONLY    (1 << 0)
  /**
   * 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
@@@ -806,7 -672,6 +806,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
  
@@@ -820,7 -685,6 +820,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
  };
@@@ -931,7 -795,7 +931,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)
 +/**
 + * Decoder is not a preferred choice for probing.
 + * This indicates that the decoder is not a good choice for probing.
 + * It could for example be an expensive to spin up hardware decoder,
 + * or it could simply not provide a lot of useful information about
 + * the stream.
 + * A decoder marked with this flag should only be used as last resort
 + * choice for probing.
 + */
 +#define AV_CODEC_CAP_AVOID_PROBING       (1 << 17)
 +/**
 + * 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 H.263+ 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
@@@ -1480,16 -1271,11 +1480,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
      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 contains data in the form
 +     * of the AVMasteringDisplayMetadata struct.
 +     */
 +    AV_PKT_DATA_MASTERING_DISPLAY_METADATA,
 +
 +    /**
       * This side data should be associated with a video stream and corresponds
       * to the AVSphericalMapping structure.
       */
      AV_PKT_DATA_SPHERICAL,
 +
 +    /**
 +     * Content light level (based on CTA-861.3). This metadata should be
 +     * associated with a video stream and contains data in the form of the
 +     * AVContentLightMetadata struct.
 +     */
 +    AV_PKT_DATA_CONTENT_LIGHT_LEVEL,
  };
  
 +#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.
   *
@@@ -1688,12 -1388,6 +1688,12 @@@ typedef struct AVPacket 
  } AVPacket;
  #define AV_PKT_FLAG_KEY     0x0001 ///< The packet contains a keyframe
  #define AV_PKT_FLAG_CORRUPT 0x0002 ///< The packet content is corrupted
 +/**
 + * Flag is used to discard packets which are required to maintain valid
 + * decoder state but are not required for output and should be dropped
 + * after decoding.
 + **/
 +#define AV_PKT_FLAG_DISCARD   0x0004
  
  enum AVSideDataParamChangeFlags {
      AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT  = 0x0001,
@@@ -1721,12 -1415,6 +1721,12 @@@ 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.
 + * You can use AVOptions (av_opt* / av_set/get*()) to access these fields from user
 + * applications.
 + * The name string for AVOptions options matches the associated command line
 + * parameter name and can be found in libavcodec/options_table.h
 + * The AVOption/command line parameter names differ in some cases from the C
 + * structure field names for historic reasons or brevity.
   * 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.
       * 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 output by avcodec_receive_frame() due frame
       * - decoding: unused
       */
      int ildct_cmp;
 -#define FF_CMP_SAD    0
 -#define FF_CMP_SSE    1
 -#define FF_CMP_SATD   2
 -#define FF_CMP_DCT    3
 -#define FF_CMP_PSNR   4
 -#define FF_CMP_BIT    5
 -#define FF_CMP_RD     6
 -#define FF_CMP_ZERO   7
 -#define FF_CMP_VSAD   8
 -#define FF_CMP_VSSE   9
 -#define FF_CMP_NSSE   10
 -#define FF_CMP_DCTMAX 13
 -#define FF_CMP_DCT264 14
 -#define FF_CMP_CHROMA 256
 +#define FF_CMP_SAD          0
 +#define FF_CMP_SSE          1
 +#define FF_CMP_SATD         2
 +#define FF_CMP_DCT          3
 +#define FF_CMP_PSNR         4
 +#define FF_CMP_BIT          5
 +#define FF_CMP_RD           6
 +#define FF_CMP_ZERO         7
 +#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_MEDIAN_SAD   15
 +#define FF_CMP_CHROMA       256
  
      /**
       * ME diamond size & shape
       * 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
      /**
  #define FF_BUG_DC_CLIP          4096
  #define FF_BUG_MS               8192 ///< Work around various bugs in Microsoft's broken decoders.
  #define FF_BUG_TRUNCATED       16384
 +#define FF_BUG_IEDGE           32768
  
      /**
       * strictly follow the standard (MPEG-4, ...).
      int error_concealment;
  #define FF_EC_GUESS_MVS   1
  #define FF_EC_DEBLOCK     2
 +#define FF_EC_FAVOR_INTER 256
  
      /**
       * debug
  #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
 +     * - 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 64-bit 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
       */
 -    attribute_deprecated int lowres;
 +     int lowres;
  #endif
  
  #if FF_API_CODED_FRAME
  #define FF_PROFILE_MPEG2_AAC_LOW 128
  #define FF_PROFILE_MPEG2_AAC_HE  131
  
 +#define FF_PROFILE_DNXHD         0
 +#define FF_PROFILE_DNXHR_LB      1
 +#define FF_PROFILE_DNXHR_SQ      2
 +#define FF_PROFILE_DNXHR_HQ      3
 +#define FF_PROFILE_DNXHR_HQX     4
 +#define FF_PROFILE_DNXHR_444     5
 +
  #define FF_PROFILE_DTS         20
  #define FF_PROFILE_DTS_ES      30
  #define FF_PROFILE_DTS_96_24   40
  #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.
 +     * - encoding unused.
 +     * - decoding set by user.
 +     */
 +    AVRational pkt_timebase;
 +
 +    /**
 +     * AVCodecDescriptor
 +     * - 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.
 +     */
 +     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).
 +     *
 +     * - 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
 +     * - 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
 +     * - encoding: Set by user, can be NULL.
 +     * - decoding: unused.
 +     */
 +    uint16_t *chroma_intra_matrix;
 +
 +    /**
 +     * dump format separator.
 +     * can be ", " or "\n      " or anything else
 +     * - 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
 +     */
 +    char *codec_whitelist;
 +
 +    /*
 +     * Properties of the stream that gets decoded
 +     * - 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.
       *
       * - decoding: unused
      /**
       * A reference to the AVHWFramesContext describing the input (for encoding)
       * or output (decoding) frames. The reference is set by the caller and
 -     * afterwards owned (and freed) by libavcodec.
 +     * afterwards owned (and freed) by libavcodec - it should never be read by
 +     * the caller after being set.
       *
       * - decoding: This field should be set by the caller from the get_format()
       *             callback. The previous reference (if any) will always be
      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
 +
 +    /**
 +     * Audio only. The amount of padding (in samples) appended by the encoder to
 +     * the end of the audio. I.e. this number of decoded samples must be
 +     * discarded by the caller from the end of the stream to get the original
 +     * audio without any trailing padding.
 +     *
 +     * - decoding: unused
 +     * - encoding: unused
 +     */
 +    int trailing_padding;
 +
 +    /**
 +     * The number of pixels per image to maximally accept.
 +     *
 +     * - decoding: set by user
 +     * - encoding: set by user
 +     */
 +    int64_t max_pixels;
 +
 +    /**
 +     * A reference to the AVHWDeviceContext describing the device which will
 +     * be used by a hardware encoder/decoder.  The reference is set by the
 +     * caller and afterwards owned (and freed) by libavcodec.
 +     *
 +     * This should be used if either the codec device does not require
 +     * hardware frames or any that are used are to be allocated internally by
 +     * libavcodec.  If the user wishes to supply any of the frames used as
 +     * encoder input or decoder output then hw_frames_ctx should be used
 +     * instead.  When hw_frames_ctx is set in get_format() for a decoder, this
 +     * field will be ignored while decoding the associated stream segment, but
 +     * may again be used on a following one after another get_format() call.
 +     *
 +     * For both encoders and decoders this field should be set before
 +     * avcodec_open2() is called and must not be written to thereafter.
 +     *
 +     * Note that some decoders may require this field to be set initially in
 +     * order to support hw_frames_ctx at all - in that case, all frames
 +     * contexts used must be created on the same device.
 +     */
 +    AVBufferRef *hw_device_ctx;
 +
 +    /**
 +     * Bit set of AV_HWACCEL_FLAG_* flags, which affect hardware accelerated
 +     * decoding (if active).
 +     * - encoding: unused
 +     * - decoding: Set by user (either before avcodec_open2(), or in the
 +     *             AVCodecContext.get_format callback)
 +     */
 +    int hwaccel_flags;
++
++    /**
+      * Video decoding only. Certain video codecs support cropping, meaning that
+      * only a sub-rectangle of the decoded frame is intended for display.  This
+      * option controls how cropping is handled by libavcodec.
+      *
+      * When set to 1 (the default), libavcodec will apply cropping internally.
+      * I.e. it will modify the output frame width/height fields and offset the
+      * data pointers (only by as much as possible while preserving alignment, or
+      * by the full amount if the AV_CODEC_FLAG_UNALIGNED flag is set) so that
+      * the frames output by the decoder refer only to the cropped area. The
+      * crop_* fields of the output frames will be zero.
+      *
+      * When set to 0, the width/height fields of the output frames will be set
+      * to the coded dimensions and the crop_* fields will describe the cropping
+      * rectangle. Applying the cropping is left to the caller.
+      *
+      * @warning When hardware acceleration with opaque output frames is used,
+      * libavcodec is unable to apply cropping from the top/left border.
+      *
+      * @note when this option is set to zero, the width/height fields of the
+      * AVCodecContext and output AVFrames have different meanings. The codec
+      * context fields store display dimensions (with the coded dimensions in
+      * coded_width/height), while the frame fields store the coded dimensions
+      * (with the display dimensions being determined by the crop_* fields).
+      */
+     int apply_cropping;
  } 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.
   */
@@@ -3703,7 -3181,9 +3730,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
      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}
  
      const char *bsfs;
  } AVCodec;
  
 +int av_codec_get_max_lowres(const AVCodec *codec);
 +
 +struct MpegEncContext;
 +
  /**
   * @defgroup lavc_hwaccel AVHWAccel
   * @{
@@@ -3837,7 -3313,7 +3864,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.
       *
       * This will be called from ff_get_format(), after hwaccel and
   * 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,
  
@@@ -4043,7 -3505,6 +4070,7 @@@ typedef struct AVSubtitleRect 
       * struct.
       */
      char *ass;
 +
      int flags;
  } AVSubtitleRect;
  
@@@ -4100,35 -3561,11 +4127,35 @@@ typedef struct AVCodecParameters 
      /**
       * The average bitrate of the encoded data (in bits per second).
       */
 -    int bit_rate;
 +    int64_t bit_rate;
  
 +    /**
 +     * The number of bits per sample in the codedwords.
 +     *
 +     * This is basically the bitrate per sample. It is mandatory for a bunch of
 +     * formats to actually decode them. It's the number of bits for one sample in
 +     * the actual coded bitstream.
 +     *
 +     * This could be for example 4 for ADPCM
 +     * For PCM formats this matches bits_per_raw_sample
 +     * Can be 0
 +     */
      int bits_per_coded_sample;
  
      /**
 +     * This is the number of valid bits in each output sample. If the
 +     * sample format has more bits, the least significant bits are additional
 +     * padding bits, which are always 0. Use right shifts to reduce the sample
 +     * to its actual size. For example, audio formats with 24 bit samples will
 +     * have bits_per_raw_sample set to 24, and format set to AV_SAMPLE_FMT_S32.
 +     * To get the original sample use "(int32_t)sample >> 8"."
 +     *
 +     * For ADPCM this might be 12 or 16 or similar
 +     * Can be 0
 +     */
 +    int bits_per_raw_sample;
 +
 +    /**
       * Codec-specific bitstream restrictions that the stream conforms to.
       */
      int profile;
      enum AVChromaLocation              chroma_location;
  
      /**
 +     * Video only. Number of delayed frames.
 +     */
 +    int video_delay;
 +
 +    /**
       * Audio only. The channel layout bitmask. May be 0 if the channel layout is
       * unknown or unspecified, otherwise the number of bits set must be equal to
       * the channels field.
       * Corresponds to nBlockAlign in WAVEFORMATEX.
       */
      int      block_align;
 +    /**
 +     * Audio only. Audio frame size, if known. Required by some formats to be static.
 +     */
 +    int      frame_size;
  
      /**
       * Audio only. The amount of padding (in samples) inserted by the encoder at
       * audio without any trailing padding.
       */
      int trailing_padding;
 +    /**
 +     * Audio only. Number of samples to skip after a discontinuity.
 +     */
 +    int seek_preroll;
  } AVCodecParameters;
  
  /**
@@@ -4298,29 -3722,13 +4325,29 @@@ const AVClass *avcodec_get_class(void)
  
  #if FF_API_COPY_CONTEXT
  /**
 + * 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
   * unopened, i.e. you are required to call avcodec_open2() before you
   * 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
   *
@@@ -4542,20 -3950,6 +4569,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.
   *
   * @deprecated Use av_packet_unref
@@@ -4611,38 -4005,9 +4638,38 @@@ int av_packet_shrink_side_data(AVPacke
   * @param size pointer for side information size to store (optional)
   * @return pointer to data if present or NULL otherwise
   */
 -uint8_t* av_packet_get_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
 +uint8_t* av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type,
                                   int *size);
  
 +#if FF_API_MERGE_SD_API
 +attribute_deprecated
 +int av_packet_merge_side_data(AVPacket *pkt);
 +
 +attribute_deprecated
 +int av_packet_split_side_data(AVPacket *pkt);
 +#endif
 +
 +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.
@@@ -4782,28 -4147,6 +4809,28 @@@ void avcodec_align_dimensions2(AVCodecC
                                 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.
   *
   * Some decoders may support multiple frames in a single AVPacket. Such
   */
  attribute_deprecated
  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.
  attribute_deprecated
  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 AV_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 AV_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.
   */
@@@ -4980,10 -4315,8 +5007,10 @@@ int avcodec_decode_subtitle2(AVCodecCon
   *                  a flush packet.
   *
   * @return 0 on success, otherwise negative error code:
 - *      AVERROR(EAGAIN):   input is not accepted right now - the packet must be
 - *                         resent after trying to read output
 + *      AVERROR(EAGAIN):   input is not accepted in the current state - user
 + *                         must read output with avcodec_receive_frame() (once
 + *                         all output is read, the packet should be resent, and
 + *                         the call will not fail with EAGAIN).
   *      AVERROR_EOF:       the decoder has been flushed, and no new packets can
   *                         be sent to it (also returned if more than 1 flush
   *                         packet is sent)
@@@ -5004,7 -4337,7 +5031,7 @@@ int avcodec_send_packet(AVCodecContext 
   *
   * @return
   *      0:                 success, a frame was returned
 - *      AVERROR(EAGAIN):   output is not available right now - user must try
 + *      AVERROR(EAGAIN):   output is not available in this state - user must try
   *                         to send new input
   *      AVERROR_EOF:       the decoder has been fully flushed, and there will be
   *                         no more output frames
@@@ -5037,10 -4370,8 +5064,10 @@@ int avcodec_receive_frame(AVCodecContex
   *                  avctx->frame_size for all frames except the last.
   *                  The final frame may be smaller than avctx->frame_size.
   * @return 0 on success, otherwise negative error code:
 - *      AVERROR(EAGAIN):   input is not accepted right now - the frame must be
 - *                         resent after trying to read output packets
 + *      AVERROR(EAGAIN):   input is not accepted in the current state - user
 + *                         must read output with avcodec_receive_packet() (once
 + *                         all output is read, the packet should be resent, and
 + *                         the call will not fail with EAGAIN).
   *      AVERROR_EOF:       the encoder has been flushed, and no new frames can
   *                         be sent to it
   *      AVERROR(EINVAL):   codec not opened, refcounted_frames not set, it is a
@@@ -5058,8 -4389,8 +5085,8 @@@ int avcodec_send_frame(AVCodecContext *
   *              encoder. Note that the function will always call
   *              av_frame_unref(frame) before doing anything else.
   * @return 0 on success, otherwise negative error code:
 - *      AVERROR(EAGAIN):   output is not available right now - user must try
 - *                         to send input
 + *      AVERROR(EAGAIN):   output is not available in the current state - user
 + *                         must try to send input
   *      AVERROR_EOF:       the encoder has been fully flushed, and there will be
   *                         no more output packets
   *      AVERROR(EINVAL):   codec not opened, or it is an encoder
@@@ -5118,7 -4449,6 +5145,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];
@@@ -5275,10 -4605,7 +5302,10 @@@ AVCodecParserContext *av_parser_init(in
   * @param poutbuf       set to pointer to parsed buffer or NULL if not yet finished.
   * @param poutbuf_size  set to size of parsed buffer or zero if not yet finished.
   * @param buf           input buffer.
 - * @param buf_size      input length, to signal EOF, this should be 0 (so that the last frame can be output).
 + * @param buf_size      buffer size in bytes without the padding. I.e. the full buffer
 +                        size is assumed to be buf_size + AV_INPUT_BUFFER_PADDING_SIZE.
 +                        To signal EOF, this should be 0 (so that the last frame
 +                        can be output).
   * @param pts           input presentation timestamp.
   * @param dts           input decoding timestamp.
   * @param pos           input byte position in stream.
@@@ -5307,7 -4634,7 +5334,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,
@@@ -5354,12 -4681,11 +5381,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().
@@@ -5432,103 -4758,6 +5459,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
@@@ -5551,14 -4780,14 +5578,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);
  
@@@ -5611,21 -4840,10 +5638,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 src_pix_fmt,
 -                                              int has_alpha, int *loss_ptr);
 +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
 +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);
  
  enum AVPixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum AVPixelFormat * fmt);
  
@@@ -5685,7 -4914,6 +5712,7 @@@ attribute_deprecate
  void avcodec_set_dimensions(AVCodecContext *s, int width, int height);
  #endif
  
 +#if FF_API_TAG_STRING
  /**
   * Put a string representing the codec tag codec_tag in buf.
   *
   * @param codec_tag codec tag to assign
   * @return the length of the string that would have been generated if
   * enough space had been available, excluding the trailing null
 + *
 + * @deprecated see av_fourcc_make_string() and av_fourcc2str().
   */
 +attribute_deprecated
  size_t av_get_codec_tag_string(char *buf, size_t buf_size, unsigned int codec_tag);
 +#endif
  
  void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode);
  
@@@ -5730,12 -4954,7 +5757,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,
@@@ -5776,14 -4993,6 +5803,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
   * approximation.
@@@ -5812,14 -5021,9 +5839,14 @@@ int av_get_audio_frame_duration2(AVCode
  #if FF_API_OLD_BSF
  typedef struct AVBitStreamFilterContext {
      void *priv_data;
 -    struct AVBitStreamFilter *filter;
 +    const 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;
  #endif
  
@@@ -5921,82 -5125,20 +5948,82 @@@ typedef struct AVBitStreamFilter 
  
  #if FF_API_OLD_BSF
  /**
 - * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext)
 - * is deprecated. Use the new bitstream filtering API (using AVBSFContext).
 + * 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()
   */
  attribute_deprecated
  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
 + */
  attribute_deprecated
  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.
 + */
  attribute_deprecated
  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
 + */
  attribute_deprecated
  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.
 + */
  attribute_deprecated
  AVBitStreamFilter *av_bitstream_filter_next(const AVBitStreamFilter *f);
  #endif
@@@ -6095,109 -5237,17 +6122,109 @@@ void av_bsf_free(AVBSFContext **ctx)
   */
  const AVClass *av_bsf_get_class(void);
  
 -/* memory */
 +/**
 + * Structure for chain/list of bitstream filters.
 + * Empty list can be allocated by av_bsf_list_alloc().
 + */
 +typedef struct AVBSFList AVBSFList;
 +
 +/**
 + * Allocate empty list of bitstream filters.
 + * The list must be later freed by av_bsf_list_free()
 + * or finalized by av_bsf_list_finalize().
 + *
 + * @return Pointer to @ref AVBSFList on success, NULL in case of failure
 + */
 +AVBSFList *av_bsf_list_alloc(void);
 +
 +/**
 + * Free list of bitstream filters.
 + *
 + * @param lst Pointer to pointer returned by av_bsf_list_alloc()
 + */
 +void av_bsf_list_free(AVBSFList **lst);
 +
 +/**
 + * Append bitstream filter to the list of bitstream filters.
 + *
 + * @param lst List to append to
 + * @param bsf Filter context to be appended
 + *
 + * @return >=0 on success, negative AVERROR in case of failure
 + */
 +int av_bsf_list_append(AVBSFList *lst, AVBSFContext *bsf);
 +
 +/**
 + * Construct new bitstream filter context given it's name and options
 + * and append it to the list of bitstream filters.
 + *
 + * @param lst      List to append to
 + * @param bsf_name Name of the bitstream filter
 + * @param options  Options for the bitstream filter, can be set to NULL
 + *
 + * @return >=0 on success, negative AVERROR in case of failure
 + */
 +int av_bsf_list_append2(AVBSFList *lst, const char * bsf_name, AVDictionary **options);
 +/**
 + * Finalize list of bitstream filters.
 + *
 + * This function will transform @ref AVBSFList to single @ref AVBSFContext,
 + * so the whole chain of bitstream filters can be treated as single filter
 + * freshly allocated by av_bsf_alloc().
 + * If the call is successful, @ref AVBSFList structure is freed and lst
 + * will be set to NULL. In case of failure, caller is responsible for
 + * freeing the structure by av_bsf_list_free()
 + *
 + * @param      lst Filter list structure to be transformed
 + * @param[out] bsf Pointer to be set to newly created @ref AVBSFContext structure
 + *                 representing the chain of bitstream filters
 + *
 + * @return >=0 on success, negative AVERROR in case of failure
 + */
 +int av_bsf_list_finalize(AVBSFList **lst, AVBSFContext **bsf);
  
  /**
 - * Allocate a buffer with padding, reusing the given one if large enough.
 + * Parse string describing list of bitstream filters and create single
 + * @ref AVBSFContext describing the whole chain of bitstream filters.
 + * Resulting @ref AVBSFContext can be treated as any other @ref AVBSFContext freshly
 + * allocated by av_bsf_alloc().
 + *
 + * @param      str String describing chain of bitstream filters in format
 + *                 `bsf1[=opt1=val1:opt2=val2][,bsf2]`
 + * @param[out] bsf Pointer to be set to newly created @ref AVBSFContext structure
 + *                 representing the chain of bitstream filters
 + *
 + * @return >=0 on success, negative AVERROR in case of failure
 + */
 +int av_bsf_list_parse_str(const char *str, AVBSFContext **bsf);
 +
 +/**
 + * Get null/pass-through bitstream filter.
 + *
 + * @param[out] bsf Pointer to be set to new instance of pass-through bitstream filter
   *
 + * @return
 + */
 +int av_bsf_get_null_filter(AVBSFContext **bsf);
 +
 +/* memory */
 +
 +/**
   * 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.
   *
   * @param s buffer to write to; must be at least (v/255+1) bytes long
@@@ -6209,7 -5259,7 +6236,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
@@@ -6225,7 -5275,7 +6252,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
@@@ -6290,12 -5340,6 +6317,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/decode.c
@@@ -1,20 -1,20 +1,20 @@@
  /*
   * generic decoding-related code
   *
 - * 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"
  
 +#if CONFIG_ICONV
 +# include <iconv.h>
 +#endif
 +
  #include "libavutil/avassert.h"
  #include "libavutil/avstring.h"
 +#include "libavutil/bprint.h"
  #include "libavutil/common.h"
  #include "libavutil/frame.h"
  #include "libavutil/hwcontext.h"
  #include "libavutil/imgutils.h"
 +#include "libavutil/internal.h"
+ #include "libavutil/intmath.h"
  
  #include "avcodec.h"
  #include "bytestream.h"
  #include "internal.h"
  #include "thread.h"
  
 -static int apply_param_change(AVCodecContext *avctx, AVPacket *avpkt)
 +static int apply_param_change(AVCodecContext *avctx, const 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");
 +            ret = AVERROR_INVALIDDATA;
 +            goto fail2;
 +        }
 +        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");
 +            ret = AVERROR_INVALIDDATA;
 +            goto fail2;
 +        }
 +        avctx->sample_rate = val;
          size -= 4;
      }
      if (flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS) {
@@@ -122,15 -104,10 +123,15 @@@ fail2
  
  static int extract_packet_props(AVCodecInternal *avci, const AVPacket *pkt)
  {
 +    int ret = 0;
 +
      av_packet_unref(avci->last_pkt_props);
 -    if (pkt)
 -        return av_packet_copy_props(avci->last_pkt_props, pkt);
 -    return 0;
 +    if (pkt) {
 +        ret = av_packet_copy_props(avci->last_pkt_props, pkt);
 +        if (!ret)
 +            avci->last_pkt_props->size = pkt->size; // HACK: Needed for ff_init_buffer_info().
 +    }
 +    return ret;
  }
  
  static int unrefcount_frame(AVCodecInternal *avci, AVFrame *frame)
      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 = avci->to_free->channels;
          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;
 +    frame->channels       = avci->to_free->channels;
  
      return 0;
  }
@@@ -320,42 -296,6 +321,42 @@@ finish
      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.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;
 +}
 +
  /*
   * The core of the receive_frame_wrapper for the decoders implementing
   * the simple API. Certain decoders might consume partial packets without
@@@ -367,9 -307,7 +368,9 @@@ static int decode_simple_internal(AVCod
      AVCodecInternal   *avci = avctx->internal;
      DecodeSimpleContext *ds = &avci->ds;
      AVPacket           *pkt = ds->in_pkt;
 -    int got_frame;
 +    // copy to ensure we do not change pkt
 +    AVPacket tmp;
 +    int got_frame, actual_got_frame, did_split;
      int ret;
  
      if (!pkt->data && !avci->draining) {
            avctx->active_thread_type & FF_THREAD_FRAME))
          return AVERROR_EOF;
  
 +    tmp = *pkt;
 +#if FF_API_MERGE_SD
 +FF_DISABLE_DEPRECATION_WARNINGS
 +    did_split = avci->compat_decode_partial_size ?
 +                ff_packet_split_and_drop_side_data(&tmp) :
 +                av_packet_split_side_data(&tmp);
 +
 +    if (did_split) {
 +        ret = extract_packet_props(avctx->internal, &tmp);
 +        if (ret < 0)
 +            return ret;
 +
 +        ret = apply_param_change(avctx, &tmp);
 +        if (ret < 0)
 +            return ret;
 +    }
 +FF_ENABLE_DEPRECATION_WARNINGS
 +#endif
 +
      got_frame = 0;
  
      if (HAVE_THREADS && avctx->active_thread_type & FF_THREAD_FRAME) {
 -        ret = ff_thread_decode_frame(avctx, frame, &got_frame, pkt);
 +        ret = ff_thread_decode_frame(avctx, frame, &got_frame, &tmp);
      } else {
 -        ret = avctx->codec->decode(avctx, frame, &got_frame, pkt);
 +        ret = avctx->codec->decode(avctx, frame, &got_frame, &tmp);
  
          if (!(avctx->codec->caps_internal & FF_CODEC_CAP_SETS_PKT_DTS))
              frame->pkt_dts = pkt->dts;
 -        /* get_buffer is supposed to set frame parameters */
 -        if (!(avctx->codec->capabilities & AV_CODEC_CAP_DR1)) {
 -            frame->sample_aspect_ratio = avctx->sample_aspect_ratio;
 -            frame->width               = avctx->width;
 -            frame->height              = avctx->height;
 -            frame->format              = avctx->codec->type == AVMEDIA_TYPE_VIDEO ?
 -                                         avctx->pix_fmt : avctx->sample_fmt;
 +        if (avctx->codec->type == AVMEDIA_TYPE_VIDEO) {
 +            if(!avctx->has_b_frames)
 +                frame->pkt_pos = pkt->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)) {
 +                if (!frame->sample_aspect_ratio.num)  frame->sample_aspect_ratio = avctx->sample_aspect_ratio;
 +                if (!frame->width)                    frame->width               = avctx->width;
 +                if (!frame->height)                   frame->height              = avctx->height;
 +                if (frame->format == AV_PIX_FMT_NONE) frame->format              = avctx->pix_fmt;
 +            }
          }
      }
 -
      emms_c();
 +    actual_got_frame = got_frame;
 +
 +    if (avctx->codec->type == AVMEDIA_TYPE_VIDEO) {
 +        if (frame->flags & AV_FRAME_FLAG_DISCARD)
 +            got_frame = 0;
 +        if (got_frame)
 +            frame->best_effort_timestamp = guess_correct_pts(avctx,
 +                                                             frame->pts,
 +                                                             frame->pkt_dts);
 +    } else if (avctx->codec->type == AVMEDIA_TYPE_AUDIO) {
 +        uint8_t *side;
 +        int side_size;
 +        uint32_t discard_padding = 0;
 +        uint8_t skip_reason = 0;
 +        uint8_t discard_reason = 0;
 +
 +        if (ret >= 0 && got_frame) {
 +            frame->best_effort_timestamp = guess_correct_pts(avctx,
 +                                                             frame->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 (!frame->channels)
 +                frame->channels = avctx->channels;
 +            if (!frame->sample_rate)
 +                frame->sample_rate = avctx->sample_rate;
 +        }
 +
 +        side= av_packet_get_side_data(pkt, AV_PKT_DATA_SKIP_SAMPLES, &side_size);
 +        if(side && side_size>=10) {
 +            avctx->internal->skip_samples = AV_RL32(side) * avctx->internal->skip_samples_multiplier;
 +            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 ((frame->flags & AV_FRAME_FLAG_DISCARD) && got_frame &&
 +            !(avctx->flags2 & AV_CODEC_FLAG2_SKIP_MANUAL)) {
 +            avctx->internal->skip_samples = FFMAX(0, avctx->internal->skip_samples - frame->nb_samples);
 +            got_frame = 0;
 +        }
 +
 +        if (avctx->internal->skip_samples > 0 && got_frame &&
 +            !(avctx->flags2 & AV_CODEC_FLAG2_SKIP_MANUAL)) {
 +            if(frame->nb_samples <= avctx->internal->skip_samples){
 +                got_frame = 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->pts!=AV_NOPTS_VALUE)
 +                        frame->pts += diff_ts;
 +#if FF_API_PKT_PTS
 +FF_DISABLE_DEPRECATION_WARNINGS
 +                    if(frame->pkt_pts!=AV_NOPTS_VALUE)
 +                        frame->pkt_pts += diff_ts;
 +FF_ENABLE_DEPRECATION_WARNINGS
 +#endif
 +                    if(frame->pkt_dts!=AV_NOPTS_VALUE)
 +                        frame->pkt_dts += diff_ts;
 +                    if (frame->pkt_duration >= diff_ts)
 +                        frame->pkt_duration -= 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 &&
 +            !(avctx->flags2 & AV_CODEC_FLAG2_SKIP_MANUAL)) {
 +            if (discard_padding == frame->nb_samples) {
 +                got_frame = 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);
 +                    frame->pkt_duration = 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) {
 +            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;
 +            }
 +        }
 +    }
 +#if FF_API_MERGE_SD
 +    if (did_split) {
 +        av_packet_free_side_data(&tmp);
 +        if(ret == tmp.size)
 +            ret = pkt->size;
 +    }
 +#endif
 +
 +    if (avctx->codec->type == AVMEDIA_TYPE_AUDIO &&
 +        !avci->showed_multi_packet_warning &&
 +        ret >= 0 && ret != pkt->size && !(avctx->codec->capabilities & AV_CODEC_CAP_SUBFRAMES)) {
 +        av_log(avctx, AV_LOG_WARNING, "Multiple frames in a packet.\n");
 +        avci->showed_multi_packet_warning = 1;
 +    }
  
      if (!got_frame)
          av_frame_unref(frame);
  
 -    if (ret >= 0 && avctx->codec->type == AVMEDIA_TYPE_VIDEO)
 +    if (ret >= 0 && avctx->codec->type == AVMEDIA_TYPE_VIDEO && !(avctx->flags & AV_CODEC_FLAG_TRUNCATED))
          ret = pkt->size;
  
  #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
  
 -    if (avctx->internal->draining && !got_frame)
 -        avci->draining_done = 1;
 +    /* do not stop draining when actual_got_frame != 0 or ret < 0 */
 +    /* got_frame == 0 but actual_got_frame != 0 when frame is discarded */
 +    if (avctx->internal->draining && !actual_got_frame) {
 +        if (ret < 0) {
 +            /* prevent infinite loop if a decoder wrongly always return error on draining */
 +            /* reasonable nb_errors_max = maximum b frames + thread count */
 +            int nb_errors_max = 20 + (HAVE_THREADS && avctx->active_thread_type & FF_THREAD_FRAME ?
 +                                avctx->thread_count : 1);
 +
 +            if (avci->nb_draining_errors++ >= nb_errors_max) {
 +                av_log(avctx, AV_LOG_ERROR, "Too many errors when draining, this is a bug. "
 +                       "Stop draining and force EOF.\n");
 +                avci->draining_done = 1;
 +                ret = AVERROR_BUG;
 +            }
 +        } else {
 +            avci->draining_done = 1;
 +        }
 +    }
  
      avci->compat_decode_consumed += ret;
  
  
          pkt->data                += consumed;
          pkt->size                -= consumed;
 +        avci->last_pkt_props->size -= consumed; // See extract_packet_props() comment.
          pkt->pts                  = AV_NOPTS_VALUE;
          pkt->dts                  = AV_NOPTS_VALUE;
          avci->last_pkt_props->pts = AV_NOPTS_VALUE;
@@@ -645,7 -417,7 +646,7 @@@ static int decode_receive_frame_interna
  int attribute_align_arg avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt)
  {
      AVCodecInternal *avci = avctx->internal;
 -    int ret = 0;
 +    int ret;
  
      if (!avcodec_is_open(avctx) || !av_codec_is_decoder(avctx->codec))
          return AVERROR(EINVAL);
      if (avctx->internal->draining)
          return AVERROR_EOF;
  
 +    if (avpkt && !avpkt->size && avpkt->data)
 +        return AVERROR(EINVAL);
 +
      ret = bsfs_init(avctx);
      if (ret < 0)
          return ret;
      return 0;
  }
  
 -               "Invalid cropping information set by a decoder: %zu/%zu/%zu/%zu "
+ static int calc_cropping_offsets(size_t offsets[4], const AVFrame *frame,
+                                  const AVPixFmtDescriptor *desc)
+ {
+     int i, j;
+     for (i = 0; frame->data[i]; i++) {
+         const AVComponentDescriptor *comp = NULL;
+         int shift_x = (i == 1 || i == 2) ? desc->log2_chroma_w : 0;
+         int shift_y = (i == 1 || i == 2) ? desc->log2_chroma_h : 0;
+         if (desc->flags & (AV_PIX_FMT_FLAG_PAL | AV_PIX_FMT_FLAG_PSEUDOPAL) && i == 1) {
+             offsets[i] = 0;
+             break;
+         }
+         /* find any component descriptor for this plane */
+         for (j = 0; j < desc->nb_components; j++) {
+             if (desc->comp[j].plane == i) {
+                 comp = &desc->comp[j];
+                 break;
+             }
+         }
+         if (!comp)
+             return AVERROR_BUG;
+         offsets[i] = (frame->crop_top  >> shift_y) * frame->linesize[i] +
+                      (frame->crop_left >> shift_x) * comp->step;
+     }
+     return 0;
+ }
+ static int apply_cropping(AVCodecContext *avctx, AVFrame *frame)
+ {
+     const AVPixFmtDescriptor *desc;
+     size_t offsets[4];
+     int i;
+     /* make sure we are noisy about decoders returning invalid cropping data */
+     if (frame->crop_left >= INT_MAX - frame->crop_right        ||
+         frame->crop_top  >= INT_MAX - frame->crop_bottom       ||
+         (frame->crop_left + frame->crop_right) >= frame->width ||
+         (frame->crop_top + frame->crop_bottom) >= frame->height) {
+         av_log(avctx, AV_LOG_WARNING,
 -            int log2_align = offsets[i] ? av_ctz(offsets[i]) : INT_MAX;
++               "Invalid cropping information set by a decoder: "
++               "%"SIZE_SPECIFIER"/%"SIZE_SPECIFIER"/%"SIZE_SPECIFIER"/%"SIZE_SPECIFIER" "
+                "(frame size %dx%d). This is a bug, please report it\n",
+                frame->crop_left, frame->crop_right, frame->crop_top, frame->crop_bottom,
+                frame->width, frame->height);
+         frame->crop_left   = 0;
+         frame->crop_right  = 0;
+         frame->crop_top    = 0;
+         frame->crop_bottom = 0;
+         return 0;
+     }
+     if (!avctx->apply_cropping)
+         return 0;
+     desc = av_pix_fmt_desc_get(frame->format);
+     if (!desc)
+         return AVERROR_BUG;
+     /* Apply just the right/bottom cropping for hwaccel formats. Bitstream
+      * formats cannot be easily handled here either (and corresponding decoders
+      * should not export any cropping anyway), so do the same for those as well.
+      * */
+     if (desc->flags & (AV_PIX_FMT_FLAG_BITSTREAM | AV_PIX_FMT_FLAG_HWACCEL)) {
+         frame->width      -= frame->crop_right;
+         frame->height     -= frame->crop_bottom;
+         frame->crop_right  = 0;
+         frame->crop_bottom = 0;
+         return 0;
+     }
+     /* calculate the offsets for each plane */
+     calc_cropping_offsets(offsets, frame, desc);
+     /* adjust the offsets to avoid breaking alignment */
+     if (!(avctx->flags & AV_CODEC_FLAG_UNALIGNED)) {
+         int min_log2_align = INT_MAX;
+         for (i = 0; frame->data[i]; i++) {
++            int log2_align = offsets[i] ? ff_ctz(offsets[i]) : INT_MAX;
+             min_log2_align = FFMIN(log2_align, min_log2_align);
+         }
+         if (min_log2_align < 5) {
+             frame->crop_left &= ~((1 << min_log2_align) - 1);
+             calc_cropping_offsets(offsets, frame, desc);
+         }
+     }
+     for (i = 0; frame->data[i]; i++)
+         frame->data[i] += offsets[i];
+     frame->width      -= (frame->crop_left + frame->crop_right);
+     frame->height     -= (frame->crop_top  + frame->crop_bottom);
+     frame->crop_left   = 0;
+     frame->crop_right  = 0;
+     frame->crop_top    = 0;
+     frame->crop_bottom = 0;
+     return 0;
+ }
  int attribute_align_arg avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame)
  {
      AVCodecInternal *avci = avctx->internal;
              return ret;
      }
  
+     if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) {
+         ret = apply_cropping(avctx, frame);
+         if (ret < 0) {
+             av_frame_unref(frame);
+             return ret;
+         }
+     }
      avctx->frame_number++;
  
      return 0;
  }
  
  static int compat_decode(AVCodecContext *avctx, AVFrame *frame,
 -                         int *got_frame, AVPacket *pkt)
 +                         int *got_frame, const AVPacket *pkt)
  {
      AVCodecInternal *avci = avctx->internal;
 -    int ret;
 +    int ret = 0;
  
      av_assert0(avci->compat_decode_consumed == 0);
  
@@@ -788,7 -670,7 +903,7 @@@ finish
  
  int attribute_align_arg avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture,
                                                int *got_picture_ptr,
 -                                              AVPacket *avpkt)
 +                                              const AVPacket *avpkt)
  {
      return compat_decode(avctx, picture, got_picture_ptr, avpkt);
  }
  int attribute_align_arg avcodec_decode_audio4(AVCodecContext *avctx,
                                                AVFrame *frame,
                                                int *got_frame_ptr,
 -                                              AVPacket *avpkt)
 +                                              const AVPacket *avpkt)
  {
      return compat_decode(avctx, frame, got_frame_ptr, avpkt);
  }
  
 +static void get_subtitle_defaults(AVSubtitle *sub)
 +{
 +    memset(sub, 0, sizeof(*sub));
 +    sub->pts = AV_NOPTS_VALUE;
 +}
 +
 +#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;
 +    AVCodecInternal *avci = avctx->internal;
  
 -    ret = extract_packet_props(avctx->internal, avpkt);
 -    if (ret < 0)
 -        return ret;
 +    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);
 +    }
  
      *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;
 +#if FF_API_MERGE_SD
 +FF_DISABLE_DEPRECATION_WARNINGS
 +        int did_split = avci->compat_decode_partial_size ?
 +                        ff_packet_split_and_drop_side_data(&tmp) :
 +                        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));
 +        }
 +FF_ENABLE_DEPRECATION_WARNINGS
 +#endif
 +
 +        pkt_recoded = tmp;
 +        ret = recode_subtitle(avctx, &pkt_recoded, &tmp);
 +        if (ret < 0) {
 +            *got_sub_ptr = 0;
 +        } else {
 +             ret = extract_packet_props(avctx->internal, &pkt_recoded);
 +             if (ret < 0)
 +                return ret;
 +
 +            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) {
 +                const AVRational tb = avctx->pkt_timebase.num ? avctx->pkt_timebase
 +                                                              : avctx->time_base;
 +                int err = convert_sub_to_old_ass_form(sub, avpkt, tb);
 +                if (err < 0)
 +                    ret = err;
 +            }
 +#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);
 +            }
 +
 +            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;
 +
 +            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);
 +                    ret = AVERROR_INVALIDDATA;
 +                    break;
 +                }
 +            }
 +
 +            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 FF_API_MERGE_SD
 +        if (did_split) {
 +            av_packet_free_side_data(&tmp);
 +            if(ret == tmp.size)
 +                ret = avpkt->size;
 +        }
 +#endif
 +
 +        if (*got_sub_ptr)
 +            avctx->frame_number++;
 +    }
 +
      return ret;
  }
  
@@@ -1114,13 -739,6 +1229,13 @@@ static int setup_hwaccel(AVCodecContex
          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)
@@@ -1178,10 -796,6 +1293,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 (avctx->hw_frames_ctx) {
              AVHWFramesContext *hw_frames_ctx = (AVHWFramesContext*)avctx->hw_frames_ctx->data;
@@@ -1232,9 -846,7 +1347,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     = frame->channels; //av_get_channel_layout_nb_channels(frame->channel_layout);
          int planar = av_sample_fmt_is_planar(frame->format);
          int planes = planar ? ch : 1;
  
@@@ -1320,19 -929,17 +1435,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]);
@@@ -1359,21 -966,13 +1474,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);
@@@ -1423,88 -1021,72 +1538,88 @@@ int avcodec_default_get_buffer2(AVCodec
      }
  }
  
 -int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame)
 +static int add_metadata_from_side_data(const AVPacket *avpkt, AVFrame *frame)
 +{
 +    int size;
 +    const uint8_t *side_metadata;
 +
 +    AVDictionary **frame_md = &frame->metadata;
 +
 +    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->last_pkt_props;
 +    const AVPacket *pkt = avctx->internal->last_pkt_props;
      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_SPHERICAL,     AV_FRAME_DATA_SPHERICAL },
 -        { 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_SPHERICAL,                  AV_FRAME_DATA_SPHERICAL },
 +        { 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 },
 +        { AV_PKT_DATA_CONTENT_LIGHT_LEVEL,        AV_FRAME_DATA_CONTENT_LIGHT_LEVEL },
      };
  
 -    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->pts = pkt->pts;
  #if FF_API_PKT_PTS
  FF_DISABLE_DEPRECATION_WARNINGS
 -    frame->pkt_pts = pkt->pts;
 +        frame->pkt_pts = pkt->pts;
  FF_ENABLE_DEPRECATION_WARNINGS
  #endif
 -    frame->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);
 +        frame->pkt_pos      = pkt->pos;
 +        frame->pkt_duration = pkt->duration;
 +        frame->pkt_size     = 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);
  
 -    return 0;
 -}
 -
 -int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
 -{
 -    const AVHWAccel *hwaccel = avctx->hwaccel;
 -    int override_dimensions = 1;
 -    int ret;
 +        if (pkt->flags & AV_PKT_FLAG_DISCARD) {
 +            frame->flags |= AV_FRAME_FLAG_DISCARD;
 +        } else {
 +            frame->flags = (frame->flags & ~AV_FRAME_FLAG_DISCARD);
 +        }
 +    }
 +    frame->reordered_opaque = avctx->reordered_opaque;
  
 -    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 (frame->colorspace == AVCOL_SPC_UNSPECIFIED)
 +        frame->colorspace = avctx->colorspace;
 +    if (frame->color_range == AVCOL_RANGE_UNSPECIFIED)
 +        frame->color_range = 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;
              }
          }
 +        frame->channels = 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_size2(avctx->width, avctx->height, avctx->max_pixels, AV_PIX_FMT_NONE, 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) {
+     if (avctx->codec_type == AVMEDIA_TYPE_VIDEO && !override_dimensions &&
+         !(avctx->codec->caps_internal & FF_CODEC_CAP_EXPORTS_CROPPING)) {
          frame->width  = avctx->width;
          frame->height = avctx->height;
      }
      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;
 +}
 +
  void avcodec_flush_buffers(AVCodecContext *avctx)
  {
      avctx->internal->draining      = 0;
      avctx->internal->draining_done = 0;
 +    avctx->internal->nb_draining_errors = 0;
      av_frame_unref(avctx->internal->buffer_frame);
      av_frame_unref(avctx->internal->compat_decode_frame);
      av_packet_unref(avctx->internal->buffer_pkt);
      else if (avctx->codec->flush)
          avctx->codec->flush(avctx);
  
 +    avctx->pts_correction_last_pts =
 +    avctx->pts_correction_last_dts = INT64_MIN;
 +
      ff_decode_bsfs_uninit(avctx);
  
      if (!avctx->refcounted_frames)
diff --combined libavcodec/internal.h
@@@ -1,18 -1,18 +1,18 @@@
  /*
 - * This file is part of Libav.
 + * This file is part of FFmpeg.
   *
 - * Libav is free software; you can redistribute it and/or
 + * FFmpeg is free software; you can redistribute it and/or
   * modify it under the terms of the GNU Lesser General Public
   * License as published by the Free Software Foundation; either
   * version 2.1 of the License, or (at your option) any later version.
   *
 - * Libav is distributed in the hope that it will be useful,
 + * FFmpeg is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   * Lesser General Public License for more details.
   *
   * You should have received a copy of the GNU Lesser General Public
 - * License along with Libav; if not, write to the Free Software
 + * License along with FFmpeg; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
   */
  
  #define FF_CODEC_CAP_INIT_CLEANUP           (1 << 1)
  /**
   * Decoders marked with FF_CODEC_CAP_SETS_PKT_DTS want to set
 - * AVFrame.pkt_dts manually. If the flag is set, utils.c won't overwrite
 - * this field. If it's unset, utils.c tries to guess the pkt_dts field
 + * AVFrame.pkt_dts manually. If the flag is set, decode.c won't overwrite
 + * this field. If it's unset, decode.c tries to guess the pkt_dts field
   * from the input AVPacket.
   */
  #define FF_CODEC_CAP_SETS_PKT_DTS           (1 << 2)
  /**
 -#define FF_CODEC_CAP_EXPORTS_CROPPING       (1 << 3)
 -
 -#ifdef DEBUG
 -#   define ff_dlog(ctx, ...) av_log(ctx, AV_LOG_DEBUG, __VA_ARGS__)
 -#else
 -#   define ff_dlog(ctx, ...) do { } while (0)
 -#endif
 + * The decoder extracts and fills its parameters even if the frame is
 + * skipped due to the skip_frame setting.
 + */
 +#define FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM  (1 << 3)
++/**
+  * The decoder sets the cropping fields in the output frames manually.
+  * If this cap is set, the generic code will initialize output frame
+  * dimensions to coded rather than display values.
+  */
++#define FF_CODEC_CAP_EXPORTS_CROPPING       (1 << 4)
  
  #ifdef TRACE
  #   define ff_tlog(ctx, ...) av_log(ctx, AV_LOG_TRACE, __VA_ARGS__)
  #else
 -#   define ff_tlog(ctx, ...) do { } while (0)
 +#   define ff_tlog(ctx, ...) do { } while(0)
  #endif
  
  
  #define FF_DEFAULT_QUANT_BIAS 999999
  #endif
  
 -#define FF_SANE_NB_CHANNELS 63U
 +#define FF_SANE_NB_CHANNELS 64U
  
 -#define FF_SIGNBIT(x) (x >> CHAR_BIT * sizeof(x) - 1)
 +#define FF_SIGNBIT(x) ((x) >> CHAR_BIT * sizeof(x) - 1)
 +
 +#if HAVE_SIMD_ALIGN_32
 +#   define STRIDE_ALIGN 32
 +#elif HAVE_SIMD_ALIGN_16
 +#   define STRIDE_ALIGN 16
 +#else
 +#   define STRIDE_ALIGN 8
 +#endif
  
  typedef struct FramePool {
      /**
@@@ -157,19 -156,6 +163,19 @@@ typedef struct AVCodecInternal 
      AVPacket *last_pkt_props;
  
      /**
 +     * temporary buffer used for encoders to store their bitstream
 +     */
 +    uint8_t *byte_buffer;
 +    unsigned int byte_buffer_size;
 +
 +    void *frame_thread_encoder;
 +
 +    /**
 +     * Number of audio samples to skip at the start of the next decoded frame
 +     */
 +    int skip_samples;
 +
 +    /**
       * hwaccel-specific private data
       */
      void *hwaccel_priv_data;
       * of the packet (that should be submitted in the next decode call */
      size_t compat_decode_partial_size;
      AVFrame *compat_decode_frame;
 +
 +    int showed_multi_packet_warning;
 +
 +    int skip_samples_multiplier;
 +
 +    /* to prevent infinite loop on errors when draining */
 +    int nb_draining_errors;
  } AVCodecInternal;
  
  struct AVCodecDefault {
      const uint8_t *value;
  };
  
 +extern const uint8_t ff_log2_run[41];
 +
  /**
   * Return the index into tab at which {a,b} match elements {[0],[1]} of tab.
   * If there is no such matching pair then size is returned.
@@@ -220,18 -197,6 +226,18 @@@ int ff_match_2uint16(const uint16_t (*t
  
  unsigned int avpriv_toupper4(unsigned int x);
  
 +/**
 + * does needed setup of pkt_pts/pos and such for (re)get_buffer();
 + */
 +int ff_init_buffer_info(AVCodecContext *s, AVFrame *frame);
 +
 +
 +void ff_color_frame(AVFrame *frame, const int color[4]);
 +
 +extern volatile int ff_avcodec_locked;
 +int ff_lock_avcodec(AVCodecContext *log_ctx, const AVCodec *codec);
 +int ff_unlock_avcodec(const AVCodec *codec);
 +
  int avpriv_lock_avformat(void);
  int avpriv_unlock_avformat(void);
  
   * ensure the output packet data is large enough, whether provided by the user
   * or allocated in this function.
   *
 + * @param avctx   the AVCodecContext of the encoder
   * @param avpkt   the AVPacket
   *                If avpkt->data is already set, avpkt->size is checked
   *                to ensure it is large enough.
   *                avpkt->size is set to the specified size.
   *                All other AVPacket fields will be reset with av_init_packet().
   * @param size    the minimum required packet size
 - * @return        0 on success, negative error code on failure
 + * @param min_size This is a hint to the allocation algorithm, which indicates
 + *                to what minimal size the caller might later shrink the packet
 + *                to. Encoders often allocate packets which are larger than the
 + *                amount of data that is written into them as the exact amount is
 + *                not known at the time of allocation. min_size represents the
 + *                size a packet might be shrunk to by the caller. Can be set to
 + *                0. setting this roughly correctly allows the allocation code
 + *                to choose between several allocation strategies to improve
 + *                speed slightly.
 + * @return        non negative on success, negative error code on failure
   */
 -int ff_alloc_packet(AVPacket *avpkt, int size);
 +int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int64_t min_size);
 +
 +attribute_deprecated int ff_alloc_packet(AVPacket *avpkt, int size);
  
  /**
   * Rescale from sample rate to AVCodecContext.time_base.
  static av_always_inline int64_t ff_samples_to_time_base(AVCodecContext *avctx,
                                                          int64_t samples)
  {
 +    if(samples == AV_NOPTS_VALUE)
 +        return AV_NOPTS_VALUE;
      return av_rescale_q(samples, (AVRational){ 1, avctx->sample_rate },
                          avctx->time_base);
  }
  
  /**
 + * 2^(x) for integer x
 + * @return correctly rounded float
 + */
 +static av_always_inline float ff_exp2fi(int x) {
 +    /* Normal range */
 +    if (-126 <= x && x <= 128)
 +        return av_int2float((x+127) << 23);
 +    /* Too large */
 +    else if (x > 128)
 +        return INFINITY;
 +    /* Subnormal numbers */
 +    else if (x > -150)
 +        return av_int2float(1 << (x+149));
 +    /* Negligibly small */
 +    else
 +        return 0;
 +}
 +
 +/**
   * Get a buffer for a frame. This is a wrapper around
   * AVCodecContext.get_buffer() and should be used instead calling get_buffer()
   * directly.
@@@ -316,27 -248,9 +322,27 @@@ int ff_get_buffer(AVCodecContext *avctx
   */
  int ff_reget_buffer(AVCodecContext *avctx, AVFrame *frame);
  
 -const uint8_t *avpriv_find_start_code(const uint8_t *restrict p,
 +int ff_thread_can_start_frame(AVCodecContext *avctx);
 +
 +int avpriv_h264_has_num_reorder_frames(AVCodecContext *avctx);
 +
 +/**
 + * Call avcodec_open2 recursively by decrementing counter, unlocking mutex,
 + * calling the function and then restoring again. Assumes the mutex is
 + * already locked
 + */
 +int ff_codec_open2_recursive(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options);
 +
 +/**
 + * Finalize buf into extradata and set its size appropriately.
 + */
 +int avpriv_bprint_to_extradata(AVCodecContext *avctx, struct AVBPrint *buf);
 +
 +const uint8_t *avpriv_find_start_code(const uint8_t *p,
                                        const uint8_t *end,
 -                                      uint32_t *restrict state);
 +                                      uint32_t *state);
 +
 +int avpriv_codec_get_cap_skip_frame_fill_param(const AVCodec *codec);
  
  /**
   * Check that the provided frame dimensions are valid and set them on the codec
@@@ -356,10 -270,6 +362,10 @@@ int ff_set_sar(AVCodecContext *avctx, A
  int ff_side_data_update_matrix_encoding(AVFrame *frame,
                                          enum AVMatrixEncoding matrix_encoding);
  
 +#if FF_API_MERGE_SD
 +int ff_packet_split_and_drop_side_data(AVPacket *pkt);
 +#endif
 +
  /**
   * Select the (possibly hardware accelerated) pixel format.
   * This is a wrapper around AVCodecContext.get_format() and should be used
@@@ -377,27 -287,4 +383,27 @@@ int ff_decode_frame_props(AVCodecContex
   */
  AVCPBProperties *ff_add_cpb_side_data(AVCodecContext *avctx);
  
 +int ff_side_data_set_encoder_stats(AVPacket *pkt, int quality, int64_t *error, int error_count, int pict_type);
 +
 +/**
 + * Check AVFrame for A53 side data and allocate and fill SEI message with A53 info
 + *
 + * @param frame      Raw frame to get A53 side data from
 + * @param prefix_len Number of bytes to allocate before SEI message
 + * @param data       Pointer to a variable to store allocated memory
 + *                   Upon return the variable will hold NULL on error or if frame has no A53 info.
 + *                   Otherwise it will point to prefix_len uninitialized bytes followed by
 + *                   *sei_size SEI message
 + * @param sei_size   Pointer to a variable to store generated SEI message length
 + * @return           Zero on success, negative error code on failure
 + */
 +int ff_alloc_a53_sei(const AVFrame *frame, size_t prefix_len,
 +                     void **data, size_t *sei_size);
 +
 +/**
 + * Get an estimated video bitrate based on frame size, frame rate and coded
 + * bits per pixel.
 + */
 +int64_t ff_guess_coded_bitrate(AVCodecContext *avctx);
 +
  #endif /* AVCODEC_INTERNAL_H */
@@@ -1,21 -1,18 +1,21 @@@
  /*
 - * This file is part of Libav.
 + * Copyright (c) 2001 Fabrice Bellard
 + * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
   *
 - * Libav is free software; you can redistribute it and/or
 + * This file is part of FFmpeg.
 + *
 + * FFmpeg is free software; you can redistribute it and/or
   * modify it under the terms of the GNU Lesser General Public
   * License as published by the Free Software Foundation; either
   * version 2.1 of the License, or (at your option) any later version.
   *
 - * Libav is distributed in the hope that it will be useful,
 + * FFmpeg is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   * Lesser General Public License for more details.
   *
   * You should have received a copy of the GNU Lesser General Public
 - * License along with Libav; if not, write to the Free Software
 + * License along with FFmpeg; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
   */
  
  #define AV_CODEC_DEFAULT_BITRATE 200*1000
  
  static const AVOption avcodec_options[] = {
 -{"b", "set bitrate (in bits/s)", OFFSET(bit_rate), AV_OPT_TYPE_INT, {.i64 = AV_CODEC_DEFAULT_BITRATE }, INT_MIN, INT_MAX, V|A|E},
 +{"b", "set bitrate (in bits/s)", OFFSET(bit_rate), AV_OPT_TYPE_INT64, {.i64 = AV_CODEC_DEFAULT_BITRATE }, 0, INT64_MAX, A|V|E},
 +{"ab", "set bitrate (in bits/s)", OFFSET(bit_rate), AV_OPT_TYPE_INT64, {.i64 = 128*1000 }, 0, INT_MAX, A|E},
  {"bt", "Set video bitrate tolerance (in bits/s). In 1-pass mode, bitrate tolerance specifies how far "
         "ratecontrol is willing to deviate from the target average bitrate value. This is not related "
         "to minimum/maximum bitrate. Lowering tolerance too much has an adverse effect on quality.",
         OFFSET(bit_rate_tolerance), AV_OPT_TYPE_INT, {.i64 = AV_CODEC_DEFAULT_BITRATE*20 }, 1, INT_MAX, V|E},
 -{"flags", NULL, OFFSET(flags), AV_OPT_TYPE_FLAGS, {.i64 = DEFAULT }, 0, UINT_MAX, V|A|E|D, "flags"},
 +{"flags", NULL, OFFSET(flags), AV_OPT_TYPE_FLAGS, {.i64 = DEFAULT }, 0, UINT_MAX, V|A|S|E|D, "flags"},
  {"unaligned", "allow decoders to produce unaligned output", 0, AV_OPT_TYPE_CONST, { .i64 = AV_CODEC_FLAG_UNALIGNED }, INT_MIN, INT_MAX, V | D, "flags" },
  {"mv4", "use four motion vectors per macroblock (MPEG-4)", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_4MV }, INT_MIN, INT_MAX, V|E, "flags"},
  {"qpel", "use 1/4-pel motion compensation", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_QPEL }, INT_MIN, INT_MAX, V|E, "flags"},
@@@ -70,7 -66,7 +70,7 @@@
  {"emu_edge", "do not draw edges", 0, AV_OPT_TYPE_CONST, {.i64 = CODEC_FLAG_EMU_EDGE }, INT_MIN, INT_MAX, 0, "flags"},
  #endif
  {"psnr", "error[?] variables will be set during encoding", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_PSNR }, INT_MIN, INT_MAX, V|E, "flags"},
 -{"truncated", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_TRUNCATED }, INT_MIN, INT_MAX, 0, "flags"},
 +{"truncated", "Input bitstream might be randomly truncated", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_TRUNCATED }, INT_MIN, INT_MAX, V|D, "flags"},
  #if FF_API_NORMALIZE_AQP
  {"naq", "normalize adaptive quantization", 0, AV_OPT_TYPE_CONST, {.i64 = CODEC_FLAG_NORMALIZE_AQP }, INT_MIN, INT_MAX, V|E, "flags"},
  #endif
  {"output_corrupt", "Output even potentially corrupted frames", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_OUTPUT_CORRUPT }, INT_MIN, INT_MAX, V|D, "flags"},
  {"fast", "allow non-spec-compliant speedup tricks", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_FAST }, INT_MIN, INT_MAX, V|E, "flags2"},
  {"noout", "skip bitstream encoding", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_NO_OUTPUT }, INT_MIN, INT_MAX, V|E, "flags2"},
 -{"ignorecrop", "ignore cropping information from sps", 1, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_IGNORE_CROP }, INT_MIN, INT_MAX, V|D, "flags2"},
 +{"ignorecrop", "ignore cropping information from sps", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_IGNORE_CROP }, INT_MIN, INT_MAX, V|D, "flags2"},
  {"local_header", "place global headers at every keyframe instead of in extradata", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_LOCAL_HEADER }, INT_MIN, INT_MAX, V|E, "flags2"},
 +{"chunks", "Frame data might be split into multiple chunks", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_CHUNKS }, INT_MIN, INT_MAX, V|D, "flags2"},
 +{"showall", "Show all frames before the first keyframe", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_SHOW_ALL }, INT_MIN, INT_MAX, V|D, "flags2"},
 +{"export_mvs", "export motion vectors through frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_EXPORT_MVS}, INT_MIN, INT_MAX, V|D, "flags2"},
 +{"skip_manual", "do not skip samples and export skip information as frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_SKIP_MANUAL}, INT_MIN, INT_MAX, V|D, "flags2"},
 +{"ass_ro_flush_noop", "do not reset ASS ReadOrder field on flush", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_RO_FLUSH_NOOP}, INT_MIN, INT_MAX, S|D, "flags2"},
  #if FF_API_MOTION_EST
  {"me_method", "set motion estimation method", OFFSET(me_method), AV_OPT_TYPE_INT, {.i64 = ME_EPZS }, INT_MIN, INT_MAX, V|E, "me_method"},
  {"zero", "zero motion estimation (fastest)", 0, AV_OPT_TYPE_CONST, {.i64 = ME_ZERO }, INT_MIN, INT_MAX, V|E, "me_method" },
  {"full", "full motion estimation (slowest)", 0, AV_OPT_TYPE_CONST, {.i64 = ME_FULL }, INT_MIN, INT_MAX, V|E, "me_method" },
 -{"epzs", "EPZS motion estimation (default)", 0, AV_OPT_TYPE_CONST, {.i64 = ME_EPZS }, INT_MIN, INT_MAX, V|E, "me_method" },
 +{"epzs", "EPZS motion estimation", 0, AV_OPT_TYPE_CONST, {.i64 = ME_EPZS }, INT_MIN, INT_MAX, V|E, "me_method" },
  {"esa", "esa motion estimation (alias for full)", 0, AV_OPT_TYPE_CONST, {.i64 = ME_FULL }, INT_MIN, INT_MAX, V|E, "me_method" },
  {"tesa", "tesa motion estimation", 0, AV_OPT_TYPE_CONST, {.i64 = ME_TESA }, INT_MIN, INT_MAX, V|E, "me_method" },
  {"dia", "diamond motion estimation (alias for EPZS)", 0, AV_OPT_TYPE_CONST, {.i64 = ME_EPZS }, INT_MIN, INT_MAX, V|E, "me_method" },
  {"x1", "X1 motion estimation", 0, AV_OPT_TYPE_CONST, {.i64 = ME_X1 }, INT_MIN, INT_MAX, V|E, "me_method" },
  {"hex", "hex motion estimation", 0, AV_OPT_TYPE_CONST, {.i64 = ME_HEX }, INT_MIN, INT_MAX, V|E, "me_method" },
  {"umh", "umh motion estimation", 0, AV_OPT_TYPE_CONST, {.i64 = ME_UMH }, INT_MIN, INT_MAX, V|E, "me_method" },
 +{"iter", "iter motion estimation", 0, AV_OPT_TYPE_CONST, {.i64 = ME_ITER }, INT_MIN, INT_MAX, V|E, "me_method" },
  #endif
 -{"extradata_size", NULL, OFFSET(extradata_size), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX},
 -{"time_base", NULL, OFFSET(time_base), AV_OPT_TYPE_RATIONAL, {.dbl = 0}, INT_MIN, INT_MAX},
 +{"time_base", NULL, OFFSET(time_base), AV_OPT_TYPE_RATIONAL, {.dbl = 0}, 0, INT_MAX},
  {"g", "set the group of picture (GOP) size", OFFSET(gop_size), AV_OPT_TYPE_INT, {.i64 = 12 }, INT_MIN, INT_MAX, V|E},
 -{"ar", "set audio sampling rate (in Hz)", OFFSET(sample_rate), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, A|D|E},
 -{"ac", "set number of audio channels", OFFSET(channels), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, A|D|E},
 +{"ar", "set audio sampling rate (in Hz)", OFFSET(sample_rate), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, A|D|E},
 +{"ac", "set number of audio channels", OFFSET(channels), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, A|D|E},
  {"cutoff", "set cutoff bandwidth", OFFSET(cutoff), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, A|E},
 -{"frame_size", NULL, OFFSET(frame_size), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, A|E},
 +{"frame_size", NULL, OFFSET(frame_size), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, A|E},
  {"frame_number", NULL, OFFSET(frame_number), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX},
  {"delay", NULL, OFFSET(delay), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX},
  {"qcomp", "video quantizer scale compression (VBR). Constant of ratecontrol equation. "
            OFFSET(qcompress), AV_OPT_TYPE_FLOAT, {.dbl = 0.5 }, -FLT_MAX, FLT_MAX, V|E},
  {"qblur", "video quantizer scale blur (VBR)", OFFSET(qblur), AV_OPT_TYPE_FLOAT, {.dbl = 0.5 }, -1, FLT_MAX, V|E},
  {"qmin", "minimum video quantizer scale (VBR)", OFFSET(qmin), AV_OPT_TYPE_INT, {.i64 = 2 }, -1, 69, V|E},
 -{"qmax", "maximum video quantizer scale (VBR)", OFFSET(qmax), AV_OPT_TYPE_INT, {.i64 = 31 }, -1, 69, V|E},
 +{"qmax", "maximum video quantizer scale (VBR)", OFFSET(qmax), AV_OPT_TYPE_INT, {.i64 = 31 }, -1, 1024, V|E},
  {"qdiff", "maximum difference between the quantizer scales (VBR)", OFFSET(max_qdiff), AV_OPT_TYPE_INT, {.i64 = 3 }, INT_MIN, INT_MAX, V|E},
 -{"bf", "use 'frames' B-frames", OFFSET(max_b_frames), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, -1, INT_MAX, V|E},
 +{"bf", "set maximum number of B-frames between non-B-frames", OFFSET(max_b_frames), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, -1, INT_MAX, V|E},
  {"b_qfactor", "QP factor between P- and B-frames", OFFSET(b_quant_factor), AV_OPT_TYPE_FLOAT, {.dbl = 1.25 }, -FLT_MAX, FLT_MAX, V|E},
  #if FF_API_RC_STRATEGY
  {"rc_strategy", "ratecontrol method", OFFSET(rc_strategy), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E},
  {"dc_clip", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_DC_CLIP }, INT_MIN, INT_MAX, V|D, "bug"},
  {"ms", "work around various bugs in Microsoft's broken decoders", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_MS }, INT_MIN, INT_MAX, V|D, "bug"},
  {"trunc", "truncated frames", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_TRUNCATED}, INT_MIN, INT_MAX, V|D, "bug"},
 +{"iedge", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_IEDGE }, INT_MIN, INT_MAX, V|D, "bug"},
  {"strict", "how strictly to follow the standards", OFFSET(strict_std_compliance), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, A|V|D|E, "strict"},
 -{"very", "strictly conform to a older more strict version of the spec or reference software", 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_VERY_STRICT }, INT_MIN, INT_MAX, V|D|E, "strict"},
 -{"strict", "strictly conform to all the things in the spec no matter what the consequences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_STRICT }, INT_MIN, INT_MAX, V|D|E, "strict"},
 -{"normal", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_NORMAL }, INT_MIN, INT_MAX, V|D|E, "strict"},
 -{"unofficial", "allow unofficial extensions", 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_UNOFFICIAL }, INT_MIN, INT_MAX, V|D|E, "strict"},
 -{"experimental", "allow non-standardized experimental things", 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_EXPERIMENTAL }, INT_MIN, INT_MAX, V|D|E, "strict"},
 +{"very", "strictly conform to a older more strict version of the spec or reference software", 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_VERY_STRICT }, INT_MIN, INT_MAX, A|V|D|E, "strict"},
 +{"strict", "strictly conform to all the things in the spec no matter what the consequences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_STRICT }, INT_MIN, INT_MAX, A|V|D|E, "strict"},
 +{"normal", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_NORMAL }, INT_MIN, INT_MAX, A|V|D|E, "strict"},
 +{"unofficial", "allow unofficial extensions", 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_UNOFFICIAL }, INT_MIN, INT_MAX, A|V|D|E, "strict"},
 +{"experimental", "allow non-standardized experimental things", 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_EXPERIMENTAL }, INT_MIN, INT_MAX, A|V|D|E, "strict"},
  {"b_qoffset", "QP offset between P- and B-frames", OFFSET(b_quant_offset), AV_OPT_TYPE_FLOAT, {.dbl = 1.25 }, -FLT_MAX, FLT_MAX, V|E},
 -{"err_detect", "set error detection flags", OFFSET(err_recognition), AV_OPT_TYPE_FLAGS, {.i64 = 0}, INT_MIN, INT_MAX, A|V|D, "err_detect"},
 -{"crccheck", "verify embedded CRCs", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_CRCCHECK }, INT_MIN, INT_MAX, V|D, "err_detect"},
 -{"bitstream", "detect bitstream specification deviations", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_BITSTREAM }, INT_MIN, INT_MAX, V|D, "err_detect"},
 -{"buffer", "detect improper bitstream length", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_BUFFER }, INT_MIN, INT_MAX, V|D, "err_detect"},
 -{"explode", "abort decoding on minor error detection", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_EXPLODE }, INT_MIN, INT_MAX, V|D, "err_detect"},
 -{"has_b_frames", NULL, OFFSET(has_b_frames), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX},
 -{"block_align", NULL, OFFSET(block_align), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX},
 +{"err_detect", "set error detection flags", OFFSET(err_recognition), AV_OPT_TYPE_FLAGS, {.i64 = 0 }, INT_MIN, INT_MAX, A|V|D, "err_detect"},
 +{"crccheck", "verify embedded CRCs", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_CRCCHECK }, INT_MIN, INT_MAX, A|V|D, "err_detect"},
 +{"bitstream", "detect bitstream specification deviations", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_BITSTREAM }, INT_MIN, INT_MAX, A|V|D, "err_detect"},
 +{"buffer", "detect improper bitstream length", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_BUFFER }, INT_MIN, INT_MAX, A|V|D, "err_detect"},
 +{"explode", "abort decoding on minor error detection", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_EXPLODE }, INT_MIN, INT_MAX, A|V|D, "err_detect"},
 +{"ignore_err", "ignore errors", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_IGNORE_ERR }, INT_MIN, INT_MAX, A|V|D, "err_detect"},
 +{"careful",    "consider things that violate the spec, are fast to check and have not been seen in the wild as errors", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_CAREFUL }, INT_MIN, INT_MAX, A|V|D, "err_detect"},
 +{"compliant",  "consider all spec non compliancies as errors", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_COMPLIANT }, INT_MIN, INT_MAX, A|V|D, "err_detect"},
 +{"aggressive", "consider things that a sane encoder should not do as an error", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_AGGRESSIVE }, INT_MIN, INT_MAX, A|V|D, "err_detect"},
 +{"has_b_frames", NULL, OFFSET(has_b_frames), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX},
 +{"block_align", NULL, OFFSET(block_align), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX},
  #if FF_API_PRIVATE_OPT
  {"mpeg_quant", "use MPEG quantizers instead of H.263", OFFSET(mpeg_quant), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E},
  #endif
  #if FF_API_MPV_OPT
  {"rc_eq", "deprecated, use encoder private options instead", OFFSET(rc_eq), AV_OPT_TYPE_STRING, {.str = NULL}, CHAR_MIN, CHAR_MAX, V|E},
  #endif
 -{"maxrate", "Set maximum bitrate tolerance (in bits/s). Requires bufsize to be set.", OFFSET(rc_max_rate), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|A|E},
 -{"minrate", "Set minimum bitrate tolerance (in bits/s). Most useful in setting up a CBR encode. It is of little use otherwise.",
 -            OFFSET(rc_min_rate), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|A|E},
 +{"maxrate", "maximum bitrate (in bits/s). Used for VBV together with bufsize.", OFFSET(rc_max_rate), AV_OPT_TYPE_INT64, {.i64 = DEFAULT }, 0, INT_MAX, V|A|E},
 +{"minrate", "minimum bitrate (in bits/s). Most useful in setting up a CBR encode. It is of little use otherwise.",
 +            OFFSET(rc_min_rate), AV_OPT_TYPE_INT64, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|A|E},
  {"bufsize", "set ratecontrol buffer size (in bits)", OFFSET(rc_buffer_size), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, A|V|E},
  #if FF_API_MPV_OPT
  {"rc_buf_aggressivity", "deprecated, use encoder private options instead", OFFSET(rc_buffer_aggressivity), AV_OPT_TYPE_FLOAT, {.dbl = 1.0 }, -FLT_MAX, FLT_MAX, V|E},
  {"rc_init_cplx", "deprecated, use encoder private options instead", OFFSET(rc_initial_cplx), AV_OPT_TYPE_FLOAT, {.dbl = DEFAULT }, -FLT_MAX, FLT_MAX, V|E},
  #endif
  {"dct", "DCT algorithm", OFFSET(dct_algo), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, V|E, "dct"},
 -{"auto", "autoselect a good one (default)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_AUTO }, INT_MIN, INT_MAX, V|E, "dct"},
 +{"auto", "autoselect a good one", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_AUTO }, INT_MIN, INT_MAX, V|E, "dct"},
  {"fastint", "fast integer", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_FASTINT }, INT_MIN, INT_MAX, V|E, "dct"},
  {"int", "accurate integer", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_INT }, INT_MIN, INT_MAX, V|E, "dct"},
  {"mmx", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_MMX }, INT_MIN, INT_MAX, V|E, "dct"},
  {"ipp", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_IPP }, INT_MIN, INT_MAX, V|E|D, "idct"},
  #endif /* FF_API_UNUSED_MEMBERS */
  {"xvid", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_XVID }, INT_MIN, INT_MAX, V|E|D, "idct"},
 -#if FF_API_IDCT_XVIDMMX
 -{"xvidmmx", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_XVID }, INT_MIN, INT_MAX, V|E|D, "idct"},
 -#endif /* FF_API_IDCT_XVIDMMX */
 +{"xvidmmx", "deprecated, for compatibility only", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_XVID }, INT_MIN, INT_MAX, V|E|D, "idct"},
  {"faani", "floating point AAN IDCT", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_FAAN }, INT_MIN, INT_MAX, V|D|E, "idct"},
 +{"simpleauto", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEAUTO }, INT_MIN, INT_MAX, V|E|D, "idct"},
  {"slice_count", NULL, OFFSET(slice_count), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX},
  {"ec", "set error concealment strategy", OFFSET(error_concealment), AV_OPT_TYPE_FLAGS, {.i64 = 3 }, INT_MIN, INT_MAX, V|D, "ec"},
  {"guess_mvs", "iterative motion vector (MV) search (slow)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_EC_GUESS_MVS }, INT_MIN, INT_MAX, V|D, "ec"},
  {"deblock", "use strong deblock filter for damaged MBs", 0, AV_OPT_TYPE_CONST, {.i64 = FF_EC_DEBLOCK }, INT_MIN, INT_MAX, V|D, "ec"},
 -{"bits_per_coded_sample", NULL, OFFSET(bits_per_coded_sample), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX},
 +{"favor_inter", "favor predicting from the previous frame", 0, AV_OPT_TYPE_CONST, {.i64 = FF_EC_FAVOR_INTER }, INT_MIN, INT_MAX, V|D, "ec"},
 +{"bits_per_coded_sample", NULL, OFFSET(bits_per_coded_sample), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX},
  #if FF_API_PRIVATE_OPT
  {"pred", "prediction method", OFFSET(prediction_method), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E, "pred"},
  {"left", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PRED_LEFT }, INT_MIN, INT_MAX, V|E, "pred"},
  {"median", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PRED_MEDIAN }, INT_MIN, INT_MAX, V|E, "pred"},
  #endif
  {"aspect", "sample aspect ratio", OFFSET(sample_aspect_ratio), AV_OPT_TYPE_RATIONAL, {.dbl = 0}, 0, 10, V|E},
 +{"sar",    "sample aspect ratio", OFFSET(sample_aspect_ratio), AV_OPT_TYPE_RATIONAL, {.dbl = 0}, 0, 10, V|E},
  {"debug", "print specific debug info", OFFSET(debug), AV_OPT_TYPE_FLAGS, {.i64 = DEFAULT }, 0, INT_MAX, V|A|S|E|D, "debug"},
  {"pict", "picture info", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_PICT_INFO }, INT_MIN, INT_MAX, V|D, "debug"},
  {"rc", "rate control", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_RC }, INT_MIN, INT_MAX, V|E, "debug"},
  {"mv", "motion vector", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_MV }, INT_MIN, INT_MAX, V|D, "debug"},
  #endif
  {"dct_coeff", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_DCT_COEFF }, INT_MIN, INT_MAX, V|D, "debug"},
 +{"green_metadata", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_GREEN_MD }, INT_MIN, INT_MAX, V|D, "debug"},
  {"skip", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_SKIP }, INT_MIN, INT_MAX, V|D, "debug"},
  {"startcode", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_STARTCODE }, INT_MIN, INT_MAX, V|D, "debug"},
  #if FF_API_UNUSED_MEMBERS
  {"er", "error recognition", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_ER }, INT_MIN, INT_MAX, V|D, "debug"},
  {"mmco", "memory management control operations (H.264)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_MMCO }, INT_MIN, INT_MAX, V|D, "debug"},
  {"bugs", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_BUGS }, INT_MIN, INT_MAX, V|D, "debug"},
 -#if FF_API_DEBUG_MV
  {"vis_qp", "visualize quantization parameter (QP), lower QP are tinted greener", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_VIS_QP }, INT_MIN, INT_MAX, V|D, "debug"},
  {"vis_mb_type", "visualize block types", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_VIS_MB_TYPE }, INT_MIN, INT_MAX, V|D, "debug"},
 -#endif
  {"buffers", "picture buffer allocations", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_BUFFERS }, INT_MIN, INT_MAX, V|D, "debug"},
 -{"thread_ops", "threading operations", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_THREADS }, INT_MIN, INT_MAX, V|D, "debug"},
 -#if FF_API_DEBUG_MV
 -{"vismv", "visualize motion vectors (MVs)", OFFSET(debug_mv), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, V|D, "debug_mv"},
 +{"thread_ops", "threading operations", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_THREADS }, INT_MIN, INT_MAX, V|A|D, "debug"},
 +{"nomc", "skip motion compensation", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_NOMC }, INT_MIN, INT_MAX, V|A|D, "debug"},
 +#if FF_API_VISMV
 +{"vismv", "visualize motion vectors (MVs) (deprecated)", OFFSET(debug_mv), AV_OPT_TYPE_FLAGS, {.i64 = DEFAULT }, 0, INT_MAX, V|D, "debug_mv"},
  {"pf", "forward predicted MVs of P-frames", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_VIS_MV_P_FOR }, INT_MIN, INT_MAX, V|D, "debug_mv"},
  {"bf", "forward predicted MVs of B-frames", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_VIS_MV_B_FOR }, INT_MIN, INT_MAX, V|D, "debug_mv"},
  {"bb", "backward predicted MVs of B-frames", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_VIS_MV_B_BACK }, INT_MIN, INT_MAX, V|D, "debug_mv"},
  {"preme", "pre motion estimation", OFFSET(pre_me), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E},
  #endif
  {"precmp", "pre motion estimation compare function", OFFSET(me_pre_cmp), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E, "cmp_func"},
 -{"sad", "sum of absolute differences, fast (default)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_SAD }, INT_MIN, INT_MAX, V|E, "cmp_func"},
 +{"sad", "sum of absolute differences, fast", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_SAD }, INT_MIN, INT_MAX, V|E, "cmp_func"},
  {"sse", "sum of squared errors", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_SSE }, INT_MIN, INT_MAX, V|E, "cmp_func"},
  {"satd", "sum of absolute Hadamard transformed differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_SATD }, INT_MIN, INT_MAX, V|E, "cmp_func"},
  {"dct", "sum of absolute DCT transformed differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_DCT }, INT_MIN, INT_MAX, V|E, "cmp_func"},
  {"vsad", "sum of absolute vertical differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_VSAD }, INT_MIN, INT_MAX, V|E, "cmp_func"},
  {"vsse", "sum of squared vertical differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_VSSE }, INT_MIN, INT_MAX, V|E, "cmp_func"},
  {"nsse", "noise preserving sum of squared differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_NSSE }, INT_MIN, INT_MAX, V|E, "cmp_func"},
 +#if CONFIG_SNOW_ENCODER
 +{"w53", "5/3 wavelet, only used in snow", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_W53 }, INT_MIN, INT_MAX, V|E, "cmp_func"},
 +{"w97", "9/7 wavelet, only used in snow", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_W97 }, INT_MIN, INT_MAX, V|E, "cmp_func"},
 +#endif
  {"dctmax", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_DCTMAX }, INT_MIN, INT_MAX, V|E, "cmp_func"},
  {"chroma", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_CHROMA }, INT_MIN, INT_MAX, V|E, "cmp_func"},
 +{"msad", "sum of absolute differences, median predicted", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_MEDIAN_SAD }, INT_MIN, INT_MAX, V|E, "cmp_func"},
  {"pre_dia_size", "diamond type & size for motion estimation pre-pass", OFFSET(pre_dia_size), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E},
  {"subq", "sub-pel motion estimation quality", OFFSET(me_subpel_quality), AV_OPT_TYPE_INT, {.i64 = 8 }, INT_MIN, INT_MAX, V|E},
  #if FF_API_AFD
  #if FF_API_XVMC
  {"xvmc_acceleration", NULL, OFFSET(xvmc_acceleration), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX},
  #endif /* FF_API_XVMC */
 -{"mbd", "macroblock decision algorithm (high quality mode)", OFFSET(mb_decision), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E, "mbd"},
 -{"simple", "use mbcmp (default)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MB_DECISION_SIMPLE }, INT_MIN, INT_MAX, V|E, "mbd"},
 +{"mbd", "macroblock decision algorithm (high quality mode)", OFFSET(mb_decision), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, 2, V|E, "mbd"},
 +{"simple", "use mbcmp", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MB_DECISION_SIMPLE }, INT_MIN, INT_MAX, V|E, "mbd"},
  {"bits", "use fewest bits", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MB_DECISION_BITS }, INT_MIN, INT_MAX, V|E, "mbd"},
  {"rd", "use best rate distortion", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MB_DECISION_RD }, INT_MIN, INT_MAX, V|E, "mbd"},
  #if FF_API_STREAM_CODEC_TAG
  #if FF_API_ERROR_RATE
  {"error", NULL, OFFSET(error_rate), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E},
  #endif
 -{"threads", NULL, OFFSET(thread_count), AV_OPT_TYPE_INT, {.i64 = 1 }, 0, INT_MAX, V|E|D, "threads"},
 +{"threads", "set the number of threads", OFFSET(thread_count), AV_OPT_TYPE_INT, {.i64 = 1 }, 0, INT_MAX, V|A|E|D, "threads"},
  {"auto", "autodetect a suitable number of threads to use", 0, AV_OPT_TYPE_CONST, {.i64 = 0 }, INT_MIN, INT_MAX, V|E|D, "threads"},
  #if FF_API_MPV_OPT
  {"me_threshold", "motion estimation threshold", OFFSET(me_threshold), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E},
  {"mb_threshold", "macroblock threshold", OFFSET(mb_threshold), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E},
  #endif
 -{"dc", "intra_dc_precision", OFFSET(intra_dc_precision), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, V|E},
 +{"dc", "intra_dc_precision", OFFSET(intra_dc_precision), AV_OPT_TYPE_INT, {.i64 = 0 }, -8, 16, V|E},
  {"nssew", "nsse weight", OFFSET(nsse_weight), AV_OPT_TYPE_INT, {.i64 = 8 }, INT_MIN, INT_MAX, V|E},
  {"skip_top", "number of macroblock rows at the top which are skipped", OFFSET(skip_top), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|D},
  {"skip_bottom", "number of macroblock rows at the bottom which are skipped", OFFSET(skip_bottom), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|D},
  {"dts_96_24", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PROFILE_DTS_96_24 }, INT_MIN, INT_MAX, A|E, "profile"},
  {"dts_hd_hra", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PROFILE_DTS_HD_HRA }, INT_MIN, INT_MAX, A|E, "profile"},
  {"dts_hd_ma", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PROFILE_DTS_HD_MA }, INT_MIN, INT_MAX, A|E, "profile"},
 -{"main10", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PROFILE_HEVC_MAIN_10 }, INT_MIN, INT_MAX, A|E, "profile"},
 +{"mpeg4_sp",   NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PROFILE_MPEG4_SIMPLE }, INT_MIN, INT_MAX, V|E, "profile"},
 +{"mpeg4_core", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PROFILE_MPEG4_CORE }, INT_MIN, INT_MAX, V|E, "profile"},
 +{"mpeg4_main", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PROFILE_MPEG4_MAIN }, INT_MIN, INT_MAX, V|E, "profile"},
 +{"mpeg4_asp",  NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PROFILE_MPEG4_ADVANCED_SIMPLE }, INT_MIN, INT_MAX, V|E, "profile"},
 +{"main10",  NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PROFILE_HEVC_MAIN_10 }, INT_MIN, INT_MAX, V|E, "profile"},
  {"level", NULL, OFFSET(level), AV_OPT_TYPE_INT, {.i64 = FF_LEVEL_UNKNOWN }, INT_MIN, INT_MAX, V|A|E, "level"},
  {"unknown", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_LEVEL_UNKNOWN }, INT_MIN, INT_MAX, V|A|E, "level"},
 +{"lowres", "decode at 1= 1/2, 2=1/4, 3=1/8 resolutions", OFFSET(lowres), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, V|A|D},
  #if FF_API_PRIVATE_OPT
  {"skip_threshold", "frame skip threshold", OFFSET(frame_skip_threshold), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E},
  {"skip_factor", "frame skip factor", OFFSET(frame_skip_factor), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E},
  #if FF_API_PRIVATE_OPT
  {"mepc", "motion estimation bitrate penalty compensation (1.0 = 256)", OFFSET(me_penalty_compensation), AV_OPT_TYPE_INT, {.i64 = 256 }, INT_MIN, INT_MAX, V|E},
  #endif
 -{"skip_loop_filter", NULL, OFFSET(skip_loop_filter), AV_OPT_TYPE_INT, {.i64 = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, "avdiscard"},
 -{"skip_idct"       , NULL, OFFSET(skip_idct)       , AV_OPT_TYPE_INT, {.i64 = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, "avdiscard"},
 -{"skip_frame"      , NULL, OFFSET(skip_frame)      , AV_OPT_TYPE_INT, {.i64 = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, "avdiscard"},
 -{"none"            , NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_NONE    }, INT_MIN, INT_MAX, V|D, "avdiscard"},
 -{"default"         , NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, "avdiscard"},
 -{"noref"           , NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_NONREF  }, INT_MIN, INT_MAX, V|D, "avdiscard"},
 -{"bidir"           , NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_BIDIR   }, INT_MIN, INT_MAX, V|D, "avdiscard"},
 -{"nokey"           , NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_NONKEY  }, INT_MIN, INT_MAX, V|D, "avdiscard"},
 -{"all"             , NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_ALL     }, INT_MIN, INT_MAX, V|D, "avdiscard"},
 +{"skip_loop_filter", "skip loop filtering process for the selected frames", OFFSET(skip_loop_filter), AV_OPT_TYPE_INT, {.i64 = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, "avdiscard"},
 +{"skip_idct"       , "skip IDCT/dequantization for the selected frames",    OFFSET(skip_idct),        AV_OPT_TYPE_INT, {.i64 = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, "avdiscard"},
 +{"skip_frame"      , "skip decoding for the selected frames",               OFFSET(skip_frame),       AV_OPT_TYPE_INT, {.i64 = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, "avdiscard"},
 +{"none"            , "discard no frame",                    0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_NONE    }, INT_MIN, INT_MAX, V|D, "avdiscard"},
 +{"default"         , "discard useless frames",              0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, "avdiscard"},
 +{"noref"           , "discard all non-reference frames",    0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_NONREF  }, INT_MIN, INT_MAX, V|D, "avdiscard"},
 +{"bidir"           , "discard all bidirectional frames",    0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_BIDIR   }, INT_MIN, INT_MAX, V|D, "avdiscard"},
 +{"nokey"           , "discard all frames except keyframes", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_NONKEY  }, INT_MIN, INT_MAX, V|D, "avdiscard"},
 +{"nointra"         , "discard all frames except I frames",  0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_NONINTRA}, INT_MIN, INT_MAX, V|D, "avdiscard"},
 +{"all"             , "discard all frames",                  0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_ALL     }, INT_MIN, INT_MAX, V|D, "avdiscard"},
  {"bidir_refine", "refine the two motion vectors used in bidirectional macroblocks", OFFSET(bidir_refine), AV_OPT_TYPE_INT, {.i64 = 1 }, 0, 4, V|E},
  #if FF_API_PRIVATE_OPT
  {"brd_scale", "downscale frames for dynamic B-frame decision", OFFSET(brd_scale), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, 10, V|E},
  #endif
 -{"keyint_min", "minimum interval between IDR-frames (x264)", OFFSET(keyint_min), AV_OPT_TYPE_INT, {.i64 = 25 }, INT_MIN, INT_MAX, V|E},
 +{"keyint_min", "minimum interval between IDR-frames", OFFSET(keyint_min), AV_OPT_TYPE_INT, {.i64 = 25 }, INT_MIN, INT_MAX, V|E},
  {"refs", "reference frames to consider for motion compensation", OFFSET(refs), AV_OPT_TYPE_INT, {.i64 = 1 }, INT_MIN, INT_MAX, V|E},
  #if FF_API_PRIVATE_OPT
  {"chromaoffset", "chroma QP offset from luma", OFFSET(chromaoffset), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E},
  #if FF_API_PRIVATE_OPT
  {"min_prediction_order", NULL, OFFSET(min_prediction_order), AV_OPT_TYPE_INT, {.i64 = -1 }, INT_MIN, INT_MAX, A|E},
  {"max_prediction_order", NULL, OFFSET(max_prediction_order), AV_OPT_TYPE_INT, {.i64 = -1 }, INT_MIN, INT_MAX, A|E},
 -{"timecode_frame_start", "GOP timecode frame start number, in non-drop-frame format", OFFSET(timecode_frame_start), AV_OPT_TYPE_INT64, {.i64 = 0 }, 0, INT64_MAX, V|E},
 +{"timecode_frame_start", "GOP timecode frame start number, in non-drop-frame format", OFFSET(timecode_frame_start), AV_OPT_TYPE_INT64, {.i64 = -1 }, -1, INT64_MAX, V|E},
  #endif
 -{"bits_per_raw_sample", NULL, OFFSET(bits_per_raw_sample), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX},
 -{"channel_layout", NULL, OFFSET(channel_layout), AV_OPT_TYPE_INT64, {.i64 = DEFAULT }, 0, INT64_MAX, A|E|D, "channel_layout"},
 -{"request_channel_layout", NULL, OFFSET(request_channel_layout), AV_OPT_TYPE_INT64, {.i64 = DEFAULT }, 0, INT64_MAX, A|D, "request_channel_layout"},
 -{"rc_max_vbv_use", NULL, OFFSET(rc_max_available_vbv_use), AV_OPT_TYPE_FLOAT, {.dbl = 1.0/3 }, 0.0, FLT_MAX, V|E},
 +{"bits_per_raw_sample", NULL, OFFSET(bits_per_raw_sample), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX},
 +{"channel_layout", NULL, OFFSET(channel_layout), AV_OPT_TYPE_UINT64, {.i64 = DEFAULT }, 0, UINT64_MAX, A|E|D, "channel_layout"},
 +{"request_channel_layout", NULL, OFFSET(request_channel_layout), AV_OPT_TYPE_UINT64, {.i64 = DEFAULT }, 0, UINT64_MAX, A|D, "request_channel_layout"},
 +{"rc_max_vbv_use", NULL, OFFSET(rc_max_available_vbv_use), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, 0.0, FLT_MAX, V|E},
  {"rc_min_vbv_use", NULL, OFFSET(rc_min_vbv_overflow_use),  AV_OPT_TYPE_FLOAT, {.dbl = 3 },     0.0, FLT_MAX, V|E},
  {"ticks_per_frame", NULL, OFFSET(ticks_per_frame), AV_OPT_TYPE_INT, {.i64 = 1 }, 1, INT_MAX, A|V|E|D},
  {"color_primaries", "color primaries", OFFSET(color_primaries), AV_OPT_TYPE_INT, {.i64 = AVCOL_PRI_UNSPECIFIED }, 1, INT_MAX, V|E|D, "color_primaries_type"},
 -{"bt709",       "BT.709",      0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_BT709 },       INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
 -{"unknown",     "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
 -{"bt470m",      "BT.470 M",    0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_BT470M },      INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
 -{"bt470bg",     "BT.470 BG",   0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_BT470BG },     INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
 -{"smpte170m",   "SMPTE 170 M", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE170M },   INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
 -{"smpte240m",   "SMPTE 240 M", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE240M },   INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
 -{"film",        "Film",        0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_FILM },        INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
 -{"bt2020",      "BT.2020",     0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_BT2020 },      INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
 -{"smpte428",    "SMPTE 428-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE428 },   INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
 -{"smpte431",    "SMPTE 431-2", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE431 },    INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
 -{"smpte432",    "SMPTE 422-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE432 },    INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
 -{"jedec-p22",    "JEDEC P22",  0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_JEDEC_P22 },   INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
 -{"unspecified", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
 -{"smptest428_1", "SMPTE 428-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE428 },   INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
 +{"bt709",       "BT.709",         0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_BT709 },        INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
 +{"unknown",     "Unspecified",    0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_UNSPECIFIED },  INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
 +{"bt470m",      "BT.470 M",       0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_BT470M },       INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
 +{"bt470bg",     "BT.470 BG",      0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_BT470BG },      INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
 +{"smpte170m",   "SMPTE 170 M",    0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE170M },    INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
 +{"smpte240m",   "SMPTE 240 M",    0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE240M },    INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
 +{"film",        "Film",           0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_FILM },         INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
 +{"bt2020",      "BT.2020",        0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_BT2020 },       INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
 +{"smpte428",    "SMPTE 428-1",    0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE428 },     INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
 +{"smpte428_1",  "SMPTE 428-1",    0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE428 },     INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
 +{"smpte431",    "SMPTE 431-2",    0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE431 },     INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
 +{"smpte432",    "SMPTE 422-1",    0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE432 },     INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
 +{"jedec-p22",   "JEDEC P22",      0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_JEDEC_P22 },    INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
 +{"unspecified", "Unspecified",    0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_UNSPECIFIED },  INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
  {"color_trc", "color transfer characteristics", OFFSET(color_trc), AV_OPT_TYPE_INT, {.i64 = AVCOL_TRC_UNSPECIFIED }, 1, INT_MAX, V|E|D, "color_trc_type"},
  {"bt709",        "BT.709",           0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_BT709 },        INT_MIN, INT_MAX, V|E|D, "color_trc_type"},
  {"unknown",      "Unspecified",      0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_UNSPECIFIED },  INT_MIN, INT_MAX, V|E|D, "color_trc_type"},
  {"iec61966_2_1", "IEC 61966-2-1",    0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_IEC61966_2_1 }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"},
  {"bt2020_10bit", "BT.2020 - 10 bit", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_BT2020_10 },    INT_MIN, INT_MAX, V|E|D, "color_trc_type"},
  {"bt2020_12bit", "BT.2020 - 12 bit", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_BT2020_12 },    INT_MIN, INT_MAX, V|E|D, "color_trc_type"},
 -{"smptest2084",  "SMPTE 2084",       0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_SMPTE2084 },    INT_MIN, INT_MAX, V|E|D, "color_trc_type"},
 -{"smptest428_1", "SMPTE 428-1",      0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_SMPTE428 },     INT_MIN, INT_MAX, V|E|D, "color_trc_type"},
 +{"smpte428_1",   "SMPTE 428-1",      0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_SMPTE428 },     INT_MIN, INT_MAX, V|E|D, "color_trc_type"},
  {"colorspace", "color space", OFFSET(colorspace), AV_OPT_TYPE_INT, {.i64 = AVCOL_SPC_UNSPECIFIED }, 0, INT_MAX, V|E|D, "colorspace_type"},
  {"rgb",         "RGB",         0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_RGB },         INT_MIN, INT_MAX, V|E|D, "colorspace_type"},
  {"bt709",       "BT.709",      0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_BT709 },       INT_MIN, INT_MAX, V|E|D, "colorspace_type"},
  {"mpeg", "MPEG (219*2^(n-8))", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_MPEG },        INT_MIN, INT_MAX, V|E|D, "color_range_type"},
  {"jpeg", "JPEG (2^n-1)",       0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_JPEG },        INT_MIN, INT_MAX, V|E|D, "color_range_type"},
  {"chroma_sample_location", "chroma sample location", OFFSET(chroma_sample_location), AV_OPT_TYPE_INT, {.i64 = AVCHROMA_LOC_UNSPECIFIED }, 0, INT_MAX, V|E|D, "chroma_sample_location_type"},
 -{"unknown", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, "chroma_sample_location_type"},
 +{"unknown",     "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, "chroma_sample_location_type"},
  {"left",        "Left",        0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_LEFT },        INT_MIN, INT_MAX, V|E|D, "chroma_sample_location_type"},
  {"center",      "Center",      0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_CENTER },      INT_MIN, INT_MAX, V|E|D, "chroma_sample_location_type"},
  {"topleft",     "Top-left",    0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_TOPLEFT },     INT_MIN, INT_MAX, V|E|D, "chroma_sample_location_type"},
  {"bottom",      "Bottom",      0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_BOTTOM },      INT_MIN, INT_MAX, V|E|D, "chroma_sample_location_type"},
  {"unspecified", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, "chroma_sample_location_type"},
  {"log_level_offset", "set the log level offset", OFFSET(log_level_offset), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX },
 -{"slices", "number of slices, used in parallelized encoding", OFFSET(slices), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, V|E},
 -{"thread_type", "select multithreading type", OFFSET(thread_type), AV_OPT_TYPE_FLAGS, {.i64 = FF_THREAD_SLICE|FF_THREAD_FRAME }, 0, INT_MAX, V|E|D, "thread_type"},
 +{"slices", "set the number of slices, used in parallelized encoding", OFFSET(slices), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, V|E},
 +{"thread_type", "select multithreading type", OFFSET(thread_type), AV_OPT_TYPE_FLAGS, {.i64 = FF_THREAD_SLICE|FF_THREAD_FRAME }, 0, INT_MAX, V|A|E|D, "thread_type"},
  {"slice", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_THREAD_SLICE }, INT_MIN, INT_MAX, V|E|D, "thread_type"},
  {"frame", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_THREAD_FRAME }, INT_MIN, INT_MAX, V|E|D, "thread_type"},
  {"audio_service_type", "audio service type", OFFSET(audio_service_type), AV_OPT_TYPE_INT, {.i64 = AV_AUDIO_SERVICE_TYPE_MAIN }, 0, AV_AUDIO_SERVICE_TYPE_NB-1, A|E, "audio_service_type"},
  {"em", "Emergency",          0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_EMERGENCY },         INT_MIN, INT_MAX, A|E, "audio_service_type"},
  {"vo", "Voice Over",         0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_VOICE_OVER },        INT_MIN, INT_MAX, A|E, "audio_service_type"},
  {"ka", "Karaoke",            0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_KARAOKE },           INT_MIN, INT_MAX, A|E, "audio_service_type"},
 -{"request_sample_fmt", NULL, OFFSET(request_sample_fmt), AV_OPT_TYPE_INT, {.i64 = AV_SAMPLE_FMT_NONE }, AV_SAMPLE_FMT_NONE, INT_MAX, A|D, "request_sample_fmt"},
 -{"u8" , "8-bit unsigned integer", 0, AV_OPT_TYPE_CONST, {.i64 = AV_SAMPLE_FMT_U8  }, INT_MIN, INT_MAX, A|D, "request_sample_fmt"},
 -{"s16", "16-bit signed integer",  0, AV_OPT_TYPE_CONST, {.i64 = AV_SAMPLE_FMT_S16 }, INT_MIN, INT_MAX, A|D, "request_sample_fmt"},
 -{"s32", "32-bit signed integer",  0, AV_OPT_TYPE_CONST, {.i64 = AV_SAMPLE_FMT_S32 }, INT_MIN, INT_MAX, A|D, "request_sample_fmt"},
 -{"flt", "32-bit float",           0, AV_OPT_TYPE_CONST, {.i64 = AV_SAMPLE_FMT_FLT }, INT_MIN, INT_MAX, A|D, "request_sample_fmt"},
 -{"dbl", "64-bit double",          0, AV_OPT_TYPE_CONST, {.i64 = AV_SAMPLE_FMT_DBL }, INT_MIN, INT_MAX, A|D, "request_sample_fmt"},
 -{"u8p" , "8-bit unsigned integer planar", 0, AV_OPT_TYPE_CONST, {.i64 = AV_SAMPLE_FMT_U8P  }, INT_MIN, INT_MAX, A|D, "request_sample_fmt"},
 -{"s16p", "16-bit signed integer planar",  0, AV_OPT_TYPE_CONST, {.i64 = AV_SAMPLE_FMT_S16P }, INT_MIN, INT_MAX, A|D, "request_sample_fmt"},
 -{"s32p", "32-bit signed integer planar",  0, AV_OPT_TYPE_CONST, {.i64 = AV_SAMPLE_FMT_S32P }, INT_MIN, INT_MAX, A|D, "request_sample_fmt"},
 -{"fltp", "32-bit float planar",           0, AV_OPT_TYPE_CONST, {.i64 = AV_SAMPLE_FMT_FLTP }, INT_MIN, INT_MAX, A|D, "request_sample_fmt"},
 -{"dblp", "64-bit double planar",          0, AV_OPT_TYPE_CONST, {.i64 = AV_SAMPLE_FMT_DBLP }, INT_MIN, INT_MAX, A|D, "request_sample_fmt"},
 -{"refcounted_frames", NULL, OFFSET(refcounted_frames), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 1, A|V|D },
 +{"request_sample_fmt", "sample format audio decoders should prefer", OFFSET(request_sample_fmt), AV_OPT_TYPE_SAMPLE_FMT, {.i64=AV_SAMPLE_FMT_NONE}, -1, INT_MAX, A|D, "request_sample_fmt"},
 +{"pkt_timebase", NULL, OFFSET(pkt_timebase), AV_OPT_TYPE_RATIONAL, {.dbl = 0 }, 0, INT_MAX, 0},
 +{"sub_charenc", "set input text subtitles character encoding", OFFSET(sub_charenc), AV_OPT_TYPE_STRING, {.str = NULL}, CHAR_MIN, CHAR_MAX, S|D},
 +{"sub_charenc_mode", "set input text subtitles character encoding mode", OFFSET(sub_charenc_mode), AV_OPT_TYPE_FLAGS, {.i64 = FF_SUB_CHARENC_MODE_AUTOMATIC}, -1, INT_MAX, S|D, "sub_charenc_mode"},
 +{"do_nothing",  NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_CHARENC_MODE_DO_NOTHING},  INT_MIN, INT_MAX, S|D, "sub_charenc_mode"},
 +{"auto",        NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_CHARENC_MODE_AUTOMATIC},   INT_MIN, INT_MAX, S|D, "sub_charenc_mode"},
 +{"pre_decoder", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_CHARENC_MODE_PRE_DECODER}, INT_MIN, INT_MAX, S|D, "sub_charenc_mode"},
 +#if FF_API_ASS_TIMING
 +{"sub_text_format", "set decoded text subtitle format", OFFSET(sub_text_format), AV_OPT_TYPE_INT, {.i64 = FF_SUB_TEXT_FMT_ASS_WITH_TIMINGS}, 0, 1, S|D, "sub_text_format"},
 +#else
 +{"sub_text_format", "set decoded text subtitle format", OFFSET(sub_text_format), AV_OPT_TYPE_INT, {.i64 = FF_SUB_TEXT_FMT_ASS}, 0, 1, S|D, "sub_text_format"},
 +#endif
 +{"ass",              NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_TEXT_FMT_ASS},              INT_MIN, INT_MAX, S|D, "sub_text_format"},
 +#if FF_API_ASS_TIMING
 +{"ass_with_timings", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_TEXT_FMT_ASS_WITH_TIMINGS}, INT_MIN, INT_MAX, S|D, "sub_text_format"},
 +#endif
 +{"refcounted_frames", NULL, OFFSET(refcounted_frames), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, A|V|D },
  #if FF_API_SIDEDATA_ONLY_PKT
 -{"side_data_only_packets", NULL, OFFSET(side_data_only_packets), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, A|V|E },
 -#endif
 -{"apply_cropping", NULL, OFFSET(apply_cropping), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, V | D },
 +{"side_data_only_packets", NULL, OFFSET(side_data_only_packets), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, A|V|E },
 +#endif
++{"apply_cropping", NULL, OFFSET(apply_cropping), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, V | D },
 +{"skip_alpha", "Skip processing alpha", OFFSET(skip_alpha), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, V|D },
 +{"field_order", "Field order", OFFSET(field_order), AV_OPT_TYPE_INT, {.i64 = AV_FIELD_UNKNOWN }, 0, 5, V|D|E, "field_order" },
 +{"progressive", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AV_FIELD_PROGRESSIVE }, 0, 0, V|D|E, "field_order" },
 +{"tt", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AV_FIELD_TT }, 0, 0, V|D|E, "field_order" },
 +{"bb", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AV_FIELD_BB }, 0, 0, V|D|E, "field_order" },
 +{"tb", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AV_FIELD_TB }, 0, 0, V|D|E, "field_order" },
 +{"bt", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AV_FIELD_BT }, 0, 0, V|D|E, "field_order" },
 +{"dump_separator", "set information dump field separator", OFFSET(dump_separator), AV_OPT_TYPE_STRING, {.str = NULL}, CHAR_MIN, CHAR_MAX, A|V|S|D|E},
 +{"codec_whitelist", "List of decoders that are allowed to be used", OFFSET(codec_whitelist), AV_OPT_TYPE_STRING, { .str = NULL },  CHAR_MIN, CHAR_MAX, A|V|S|D },
 +{"pixel_format", "set pixel format", OFFSET(pix_fmt), AV_OPT_TYPE_PIXEL_FMT, {.i64=AV_PIX_FMT_NONE}, -1, INT_MAX, 0 },
 +{"video_size", "set video size", OFFSET(width), AV_OPT_TYPE_IMAGE_SIZE, {.str=NULL}, 0, INT_MAX, 0 },
 +{"max_pixels", "Maximum number of pixels", OFFSET(max_pixels), AV_OPT_TYPE_INT64, {.i64 = INT_MAX }, 0, INT_MAX, A|V|S|D|E },
  {NULL},
  };
  
diff --combined libavcodec/version.h
@@@ -1,18 -1,18 +1,18 @@@
  /*
 - * This file is part of Libav.
 + * This file is part of FFmpeg.
   *
 - * Libav is free software; you can redistribute it and/or
 + * FFmpeg is free software; you can redistribute it and/or
   * modify it under the terms of the GNU Lesser General Public
   * License as published by the Free Software Foundation; either
   * version 2.1 of the License, or (at your option) any later version.
   *
 - * Libav is distributed in the hope that it will be useful,
 + * FFmpeg is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   * Lesser General Public License for more details.
   *
   * You should have received a copy of the GNU Lesser General Public
 - * License along with Libav; if not, write to the Free Software
 + * License along with FFmpeg; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
   */
  
@@@ -27,9 -27,9 +27,9 @@@
  
  #include "libavutil/version.h"
  
 -#define LIBAVCODEC_VERSION_MAJOR 57
 -#define LIBAVCODEC_VERSION_MINOR 31
 -#define LIBAVCODEC_VERSION_MICRO  0
 +#define LIBAVCODEC_VERSION_MAJOR  57
- #define LIBAVCODEC_VERSION_MINOR  94
- #define LIBAVCODEC_VERSION_MICRO 101
++#define LIBAVCODEC_VERSION_MINOR  95
++#define LIBAVCODEC_VERSION_MICRO 100
  
  #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
                                                 LIBAVCODEC_VERSION_MINOR, \
   * FF_API_* defines may be placed below to indicate public API that will be
   * dropped at a future version bump. The defines themselves are not part of
   * the public API and may change, break or disappear at any time.
 + *
 + * @note, when bumping the major version it is recommended to manually
 + * disable each FF_API_* in its own commit instead of disabling them all
 + * at once through the bump. This improves the git bisect-ability of the change.
   */
  
 +#ifndef FF_API_VIMA_DECODER
 +#define FF_API_VIMA_DECODER     (LIBAVCODEC_VERSION_MAJOR < 58)
 +#endif
 +#ifndef FF_API_AUDIO_CONVERT
 +#define FF_API_AUDIO_CONVERT     (LIBAVCODEC_VERSION_MAJOR < 58)
 +#endif
 +#ifndef FF_API_AVCODEC_RESAMPLE
 +#define FF_API_AVCODEC_RESAMPLE  FF_API_AUDIO_CONVERT
 +#endif
  #ifndef FF_API_GETCHROMA
  #define FF_API_GETCHROMA         (LIBAVCODEC_VERSION_MAJOR < 58)
  #endif
  #ifndef FF_API_MAX_BFRAMES
  #define FF_API_MAX_BFRAMES       (LIBAVCODEC_VERSION_MAJOR < 58)
  #endif
 -#ifndef FF_API_FAST_MALLOC
 -#define FF_API_FAST_MALLOC       (LIBAVCODEC_VERSION_MAJOR < 58)
 -#endif
  #ifndef FF_API_NEG_LINESIZES
  #define FF_API_NEG_LINESIZES     (LIBAVCODEC_VERSION_MAJOR < 58)
  #endif
  #ifndef FF_API_AFD
  #define FF_API_AFD               (LIBAVCODEC_VERSION_MAJOR < 58)
  #endif
 +#ifndef FF_API_VISMV
 +/* XXX: don't forget to drop the -vismv documentation */
 +#define FF_API_VISMV             (LIBAVCODEC_VERSION_MAJOR < 58)
 +#endif
  #ifndef FF_API_AUDIOENC_DELAY
  #define FF_API_AUDIOENC_DELAY    (LIBAVCODEC_VERSION_MAJOR < 58)
  #endif
 +#ifndef FF_API_VAAPI_CONTEXT
 +#define FF_API_VAAPI_CONTEXT     (LIBAVCODEC_VERSION_MAJOR < 58)
 +#endif
 +#ifndef FF_API_MERGE_SD
 +#define FF_API_MERGE_SD          (LIBAVCODEC_VERSION_MAJOR < 58)
 +#endif
  #ifndef FF_API_AVCTX_TIMEBASE
  #define FF_API_AVCTX_TIMEBASE    (LIBAVCODEC_VERSION_MAJOR < 59)
  #endif
  #ifndef FF_API_STAT_BITS
  #define FF_API_STAT_BITS         (LIBAVCODEC_VERSION_MAJOR < 59)
  #endif
 -#ifndef FF_API_NVENC_OLD_NAME
 -#define FF_API_NVENC_OLD_NAME    (LIBAVCODEC_VERSION_MAJOR < 59)
 -#endif
  #ifndef FF_API_PRIVATE_OPT
  #define FF_API_PRIVATE_OPT      (LIBAVCODEC_VERSION_MAJOR < 59)
  #endif
 +#ifndef FF_API_ASS_TIMING
 +#define FF_API_ASS_TIMING       (LIBAVCODEC_VERSION_MAJOR < 59)
 +#endif
  #ifndef FF_API_OLD_BSF
  #define FF_API_OLD_BSF          (LIBAVCODEC_VERSION_MAJOR < 59)
  #endif
  #ifndef FF_API_GET_CONTEXT_DEFAULTS
  #define FF_API_GET_CONTEXT_DEFAULTS (LIBAVCODEC_VERSION_MAJOR < 59)
  #endif
 -#ifndef FF_API_VAAPI_CONTEXT
 -#define FF_API_VAAPI_CONTEXT    (LIBAVCODEC_VERSION_MAJOR < 59)
 +#ifndef FF_API_NVENC_OLD_NAME
 +#define FF_API_NVENC_OLD_NAME    (LIBAVCODEC_VERSION_MAJOR < 59)
 +#endif
 +#ifndef FF_API_STRUCT_VAAPI_CONTEXT
 +#define FF_API_STRUCT_VAAPI_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 59)
 +#endif
 +#ifndef FF_API_MERGE_SD_API
 +#define FF_API_MERGE_SD_API      (LIBAVCODEC_VERSION_MAJOR < 59)
  #endif
 +#ifndef FF_API_TAG_STRING
 +#define FF_API_TAG_STRING        (LIBAVCODEC_VERSION_MAJOR < 59)
 +#endif
 +
  
  #endif /* AVCODEC_VERSION_H */
index 08313ad,0000000..6a5d4d3
mode 100644,000000..100644
--- /dev/null
@@@ -1,316 -1,0 +1,318 @@@
 +stream=0, decode=0
 +    b=0
 +    ab=0
 +    bt=4000000
 +    flags=0x00000000
 +    me_method=5
 +    time_base=0/1
 +    g=12
 +    ar=0
 +    ac=0
 +    cutoff=0
 +    frame_size=0
 +    delay=0
 +    qcomp=0.500000
 +    qblur=0.500000
 +    qmin=2
 +    qmax=31
 +    qdiff=3
 +    bf=0
 +    b_qfactor=1.250000
 +    rc_strategy=0
 +    b_strategy=0
 +    ps=0
 +    mv_bits=0
 +    header_bits=0
 +    i_tex_bits=0
 +    p_tex_bits=0
 +    i_count=0
 +    p_count=0
 +    skip_count=0
 +    misc_bits=0
 +    frame_bits=0
 +    codec_tag=0
 +    bug=0x00000001
 +    strict=0
 +    b_qoffset=1.250000
 +    err_detect=0x00000000
 +    has_b_frames=0
 +    block_align=0
 +    mpeg_quant=0
 +    qsquish=0.000000
 +    rc_qmod_amp=0.000000
 +    rc_qmod_freq=0
 +    rc_override_count=0
 +    rc_eq=
 +    maxrate=0
 +    minrate=0
 +    bufsize=0
 +    rc_buf_aggressivity=1.000000
 +    i_qfactor=-0.800000
 +    i_qoffset=0.000000
 +    rc_init_cplx=0.000000
 +    dct=0
 +    lumi_mask=0.000000
 +    tcplx_mask=0.000000
 +    scplx_mask=0.000000
 +    p_mask=0.000000
 +    dark_mask=0.000000
 +    idct=0
 +    slice_count=0
 +    ec=0x00000003
 +    bits_per_coded_sample=0
 +    pred=0
 +    aspect=180/180
 +    sar=180/180
 +    debug=0x00000000
 +    vismv=0x00000000
 +    cmp=0
 +    subcmp=0
 +    mbcmp=0
 +    ildctcmp=8
 +    dia_size=0
 +    last_pred=0
 +    preme=0
 +    precmp=0
 +    pre_dia_size=0
 +    subq=8
 +    dtg_active_format=0
 +    me_range=0
 +    ibias=999999
 +    pbias=999999
 +    global_quality=0
 +    coder=0
 +    context=0
 +    slice_flags=0
 +    xvmc_acceleration=0
 +    mbd=0
 +    stream_codec_tag=0
 +    sc_threshold=0
 +    lmin=0
 +    lmax=0
 +    nr=0
 +    rc_init_occupancy=0
 +    flags2=0x00000000
 +    error=0
 +    threads=1
 +    me_threshold=0
 +    mb_threshold=0
 +    dc=0
 +    nssew=8
 +    skip_top=0
 +    skip_bottom=0
 +    profile=-99
 +    level=-99
 +    lowres=0
 +    skip_threshold=0
 +    skip_factor=0
 +    skip_exp=0
 +    skipcmp=13
 +    border_mask=0.000000
 +    mblmin=236
 +    mblmax=3658
 +    mepc=256
 +    skip_loop_filter=0
 +    skip_idct=0
 +    skip_frame=0
 +    bidir_refine=1
 +    brd_scale=0
 +    keyint_min=25
 +    refs=1
 +    chromaoffset=0
 +    trellis=0
 +    sc_factor=6
 +    mv0_threshold=256
 +    b_sensitivity=40
 +    compression_level=-1
 +    min_prediction_order=-1
 +    max_prediction_order=-1
 +    timecode_frame_start=-1
 +    bits_per_raw_sample=8
 +    channel_layout=0
 +    request_channel_layout=0
 +    rc_max_vbv_use=0.000000
 +    rc_min_vbv_use=3.000000
 +    ticks_per_frame=1
 +    color_primaries=2
 +    color_trc=2
 +    colorspace=5
 +    color_range=2
 +    chroma_sample_location=2
 +    log_level_offset=0
 +    slices=0
 +    thread_type=0x00000003
 +    audio_service_type=0
 +    request_sample_fmt=none
 +    pkt_timebase=1/25
 +    sub_charenc=
 +    sub_charenc_mode=0x00000000
 +    sub_text_format=1
 +    refcounted_frames=false
 +    side_data_only_packets=true
++    apply_cropping=true
 +    skip_alpha=false
 +    field_order=0
 +    dump_separator=
 +    codec_whitelist=
 +    pixel_format=yuvj422p
 +    video_size=400x225
 +    max_pixels=2147483647
 +stream=0, decode=1
 +    b=0
 +    ab=0
 +    bt=4000000
 +    flags=0x00000000
 +    me_method=5
 +    time_base=0/1
 +    g=12
 +    ar=0
 +    ac=0
 +    cutoff=0
 +    frame_size=0
 +    delay=0
 +    qcomp=0.500000
 +    qblur=0.500000
 +    qmin=2
 +    qmax=31
 +    qdiff=3
 +    bf=0
 +    b_qfactor=1.250000
 +    rc_strategy=0
 +    b_strategy=0
 +    ps=0
 +    mv_bits=0
 +    header_bits=0
 +    i_tex_bits=0
 +    p_tex_bits=0
 +    i_count=0
 +    p_count=0
 +    skip_count=0
 +    misc_bits=0
 +    frame_bits=0
 +    codec_tag=0
 +    bug=0x00000001
 +    strict=0
 +    b_qoffset=1.250000
 +    err_detect=0x00000000
 +    has_b_frames=0
 +    block_align=0
 +    mpeg_quant=0
 +    qsquish=0.000000
 +    rc_qmod_amp=0.000000
 +    rc_qmod_freq=0
 +    rc_override_count=0
 +    rc_eq=
 +    maxrate=0
 +    minrate=0
 +    bufsize=0
 +    rc_buf_aggressivity=1.000000
 +    i_qfactor=-0.800000
 +    i_qoffset=0.000000
 +    rc_init_cplx=0.000000
 +    dct=0
 +    lumi_mask=0.000000
 +    tcplx_mask=0.000000
 +    scplx_mask=0.000000
 +    p_mask=0.000000
 +    dark_mask=0.000000
 +    idct=0
 +    slice_count=0
 +    ec=0x00000003
 +    bits_per_coded_sample=0
 +    pred=0
 +    aspect=180/180
 +    sar=180/180
 +    debug=0x00000000
 +    vismv=0x00000000
 +    cmp=0
 +    subcmp=0
 +    mbcmp=0
 +    ildctcmp=8
 +    dia_size=0
 +    last_pred=0
 +    preme=0
 +    precmp=0
 +    pre_dia_size=0
 +    subq=8
 +    dtg_active_format=0
 +    me_range=0
 +    ibias=999999
 +    pbias=999999
 +    global_quality=0
 +    coder=0
 +    context=0
 +    slice_flags=0
 +    xvmc_acceleration=0
 +    mbd=0
 +    stream_codec_tag=0
 +    sc_threshold=0
 +    lmin=0
 +    lmax=0
 +    nr=0
 +    rc_init_occupancy=0
 +    flags2=0x00000000
 +    error=0
 +    threads=1
 +    me_threshold=0
 +    mb_threshold=0
 +    dc=0
 +    nssew=8
 +    skip_top=0
 +    skip_bottom=0
 +    profile=-99
 +    level=-99
 +    lowres=0
 +    skip_threshold=0
 +    skip_factor=0
 +    skip_exp=0
 +    skipcmp=13
 +    border_mask=0.000000
 +    mblmin=236
 +    mblmax=3658
 +    mepc=256
 +    skip_loop_filter=0
 +    skip_idct=0
 +    skip_frame=0
 +    bidir_refine=1
 +    brd_scale=0
 +    keyint_min=25
 +    refs=1
 +    chromaoffset=0
 +    trellis=0
 +    sc_factor=6
 +    mv0_threshold=256
 +    b_sensitivity=40
 +    compression_level=-1
 +    min_prediction_order=-1
 +    max_prediction_order=-1
 +    timecode_frame_start=-1
 +    bits_per_raw_sample=8
 +    channel_layout=0
 +    request_channel_layout=0
 +    rc_max_vbv_use=0.000000
 +    rc_min_vbv_use=3.000000
 +    ticks_per_frame=1
 +    color_primaries=2
 +    color_trc=2
 +    colorspace=5
 +    color_range=2
 +    chroma_sample_location=2
 +    log_level_offset=0
 +    slices=0
 +    thread_type=0x00000003
 +    audio_service_type=0
 +    request_sample_fmt=none
 +    pkt_timebase=1/25
 +    sub_charenc=
 +    sub_charenc_mode=0x00000000
 +    sub_text_format=1
 +    refcounted_frames=false
 +    side_data_only_packets=true
++    apply_cropping=true
 +    skip_alpha=false
 +    field_order=0
 +    dump_separator=
 +    codec_whitelist=
 +    pixel_format=yuvj422p
 +    video_size=400x225
 +    max_pixels=2147483647
index 7a9a921,0000000..c51957e
mode 100644,000000..100644
--- /dev/null
@@@ -1,316 -1,0 +1,318 @@@
 +stream=0, decode=0
 +    b=0
 +    ab=0
 +    bt=4000000
 +    flags=0x00000000
 +    me_method=5
 +    time_base=0/1
 +    g=12
 +    ar=0
 +    ac=0
 +    cutoff=0
 +    frame_size=0
 +    delay=0
 +    qcomp=0.500000
 +    qblur=0.500000
 +    qmin=2
 +    qmax=31
 +    qdiff=3
 +    bf=0
 +    b_qfactor=1.250000
 +    rc_strategy=0
 +    b_strategy=0
 +    ps=0
 +    mv_bits=0
 +    header_bits=0
 +    i_tex_bits=0
 +    p_tex_bits=0
 +    i_count=0
 +    p_count=0
 +    skip_count=0
 +    misc_bits=0
 +    frame_bits=0
 +    codec_tag=0
 +    bug=0x00000001
 +    strict=0
 +    b_qoffset=1.250000
 +    err_detect=0x00000000
 +    has_b_frames=0
 +    block_align=0
 +    mpeg_quant=0
 +    qsquish=0.000000
 +    rc_qmod_amp=0.000000
 +    rc_qmod_freq=0
 +    rc_override_count=0
 +    rc_eq=
 +    maxrate=0
 +    minrate=0
 +    bufsize=0
 +    rc_buf_aggressivity=1.000000
 +    i_qfactor=-0.800000
 +    i_qoffset=0.000000
 +    rc_init_cplx=0.000000
 +    dct=0
 +    lumi_mask=0.000000
 +    tcplx_mask=0.000000
 +    scplx_mask=0.000000
 +    p_mask=0.000000
 +    dark_mask=0.000000
 +    idct=0
 +    slice_count=0
 +    ec=0x00000003
 +    bits_per_coded_sample=0
 +    pred=0
 +    aspect=2835/2835
 +    sar=2835/2835
 +    debug=0x00000000
 +    vismv=0x00000000
 +    cmp=0
 +    subcmp=0
 +    mbcmp=0
 +    ildctcmp=8
 +    dia_size=0
 +    last_pred=0
 +    preme=0
 +    precmp=0
 +    pre_dia_size=0
 +    subq=8
 +    dtg_active_format=0
 +    me_range=0
 +    ibias=999999
 +    pbias=999999
 +    global_quality=0
 +    coder=0
 +    context=0
 +    slice_flags=0
 +    xvmc_acceleration=0
 +    mbd=0
 +    stream_codec_tag=0
 +    sc_threshold=0
 +    lmin=0
 +    lmax=0
 +    nr=0
 +    rc_init_occupancy=0
 +    flags2=0x00000000
 +    error=0
 +    threads=1
 +    me_threshold=0
 +    mb_threshold=0
 +    dc=0
 +    nssew=8
 +    skip_top=0
 +    skip_bottom=0
 +    profile=-99
 +    level=-99
 +    lowres=0
 +    skip_threshold=0
 +    skip_factor=0
 +    skip_exp=0
 +    skipcmp=13
 +    border_mask=0.000000
 +    mblmin=236
 +    mblmax=3658
 +    mepc=256
 +    skip_loop_filter=0
 +    skip_idct=0
 +    skip_frame=0
 +    bidir_refine=1
 +    brd_scale=0
 +    keyint_min=25
 +    refs=1
 +    chromaoffset=0
 +    trellis=0
 +    sc_factor=6
 +    mv0_threshold=256
 +    b_sensitivity=40
 +    compression_level=-1
 +    min_prediction_order=-1
 +    max_prediction_order=-1
 +    timecode_frame_start=-1
 +    bits_per_raw_sample=0
 +    channel_layout=0
 +    request_channel_layout=0
 +    rc_max_vbv_use=0.000000
 +    rc_min_vbv_use=3.000000
 +    ticks_per_frame=1
 +    color_primaries=2
 +    color_trc=2
 +    colorspace=2
 +    color_range=2
 +    chroma_sample_location=0
 +    log_level_offset=0
 +    slices=0
 +    thread_type=0x00000003
 +    audio_service_type=0
 +    request_sample_fmt=none
 +    pkt_timebase=1/25
 +    sub_charenc=
 +    sub_charenc_mode=0x00000000
 +    sub_text_format=1
 +    refcounted_frames=false
 +    side_data_only_packets=true
++    apply_cropping=true
 +    skip_alpha=false
 +    field_order=0
 +    dump_separator=
 +    codec_whitelist=
 +    pixel_format=rgba
 +    video_size=128x128
 +    max_pixels=2147483647
 +stream=0, decode=1
 +    b=0
 +    ab=0
 +    bt=4000000
 +    flags=0x00000000
 +    me_method=5
 +    time_base=0/1
 +    g=12
 +    ar=0
 +    ac=0
 +    cutoff=0
 +    frame_size=0
 +    delay=0
 +    qcomp=0.500000
 +    qblur=0.500000
 +    qmin=2
 +    qmax=31
 +    qdiff=3
 +    bf=0
 +    b_qfactor=1.250000
 +    rc_strategy=0
 +    b_strategy=0
 +    ps=0
 +    mv_bits=0
 +    header_bits=0
 +    i_tex_bits=0
 +    p_tex_bits=0
 +    i_count=0
 +    p_count=0
 +    skip_count=0
 +    misc_bits=0
 +    frame_bits=0
 +    codec_tag=0
 +    bug=0x00000001
 +    strict=0
 +    b_qoffset=1.250000
 +    err_detect=0x00000000
 +    has_b_frames=0
 +    block_align=0
 +    mpeg_quant=0
 +    qsquish=0.000000
 +    rc_qmod_amp=0.000000
 +    rc_qmod_freq=0
 +    rc_override_count=0
 +    rc_eq=
 +    maxrate=0
 +    minrate=0
 +    bufsize=0
 +    rc_buf_aggressivity=1.000000
 +    i_qfactor=-0.800000
 +    i_qoffset=0.000000
 +    rc_init_cplx=0.000000
 +    dct=0
 +    lumi_mask=0.000000
 +    tcplx_mask=0.000000
 +    scplx_mask=0.000000
 +    p_mask=0.000000
 +    dark_mask=0.000000
 +    idct=0
 +    slice_count=0
 +    ec=0x00000003
 +    bits_per_coded_sample=0
 +    pred=0
 +    aspect=2835/2835
 +    sar=2835/2835
 +    debug=0x00000000
 +    vismv=0x00000000
 +    cmp=0
 +    subcmp=0
 +    mbcmp=0
 +    ildctcmp=8
 +    dia_size=0
 +    last_pred=0
 +    preme=0
 +    precmp=0
 +    pre_dia_size=0
 +    subq=8
 +    dtg_active_format=0
 +    me_range=0
 +    ibias=999999
 +    pbias=999999
 +    global_quality=0
 +    coder=0
 +    context=0
 +    slice_flags=0
 +    xvmc_acceleration=0
 +    mbd=0
 +    stream_codec_tag=0
 +    sc_threshold=0
 +    lmin=0
 +    lmax=0
 +    nr=0
 +    rc_init_occupancy=0
 +    flags2=0x00000000
 +    error=0
 +    threads=1
 +    me_threshold=0
 +    mb_threshold=0
 +    dc=0
 +    nssew=8
 +    skip_top=0
 +    skip_bottom=0
 +    profile=-99
 +    level=-99
 +    lowres=0
 +    skip_threshold=0
 +    skip_factor=0
 +    skip_exp=0
 +    skipcmp=13
 +    border_mask=0.000000
 +    mblmin=236
 +    mblmax=3658
 +    mepc=256
 +    skip_loop_filter=0
 +    skip_idct=0
 +    skip_frame=0
 +    bidir_refine=1
 +    brd_scale=0
 +    keyint_min=25
 +    refs=1
 +    chromaoffset=0
 +    trellis=0
 +    sc_factor=6
 +    mv0_threshold=256
 +    b_sensitivity=40
 +    compression_level=-1
 +    min_prediction_order=-1
 +    max_prediction_order=-1
 +    timecode_frame_start=-1
 +    bits_per_raw_sample=0
 +    channel_layout=0
 +    request_channel_layout=0
 +    rc_max_vbv_use=0.000000
 +    rc_min_vbv_use=3.000000
 +    ticks_per_frame=1
 +    color_primaries=2
 +    color_trc=2
 +    colorspace=2
 +    color_range=2
 +    chroma_sample_location=0
 +    log_level_offset=0
 +    slices=0
 +    thread_type=0x00000003
 +    audio_service_type=0
 +    request_sample_fmt=none
 +    pkt_timebase=1/25
 +    sub_charenc=
 +    sub_charenc_mode=0x00000000
 +    sub_text_format=1
 +    refcounted_frames=false
 +    side_data_only_packets=true
++    apply_cropping=true
 +    skip_alpha=false
 +    field_order=0
 +    dump_separator=
 +    codec_whitelist=
 +    pixel_format=rgba
 +    video_size=128x128
 +    max_pixels=2147483647