Merge commit '5fccedaa67390ccddd6347c8e1c71b7664558bcd'
authorMichael Niedermayer <michaelni@gmx.at>
Thu, 1 May 2014 14:41:41 +0000 (16:41 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 1 May 2014 14:41:41 +0000 (16:41 +0200)
* commit '5fccedaa67390ccddd6347c8e1c71b7664558bcd':
  lavc: deprecate CODEC_FLAG_INPUT_PRESERVED

Conflicts:
doc/APIchanges

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
doc/APIchanges
libavcodec/avcodec.h
libavcodec/mpegvideo_enc.c
libavcodec/options_table.h
libavcodec/version.h

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:    2013-03-xx
@@@ -7,39 -7,25 +7,43 @@@ libavdevice:   2013-03-x
  libavfilter:   2013-12-xx
  libavformat:   2013-03-xx
  libavresample: 2012-10-05
 +libpostproc:   2011-04-18
 +libswresample: 2011-09-19
  libswscale:    2011-06-20
 -libavutil:     2013-12-xx
 +libavutil:     2012-10-22
  
  
  API changes, most recent first:
  
 -2014-04-xx - xxxxxxx - lavc 55.50.0 - dxva2.h
+ 2014-04-xx - xxxxxxx - avcodec.h
+   Deprecate CODEC_FLAG_INPUT_PRESERVED. Its functionality is replaced by passing
+   reference-counted frames to encoders.
 +2014-04-29 - 1bf6396 - lavc 55.60.100 - avcodec.h
 +  Add AVCodecDescriptor.mime_types field.
 +
 +2014-04-29 - xxxxxxx - lavu 52.80.0 - 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-xx - xxxxxxx - lavu 53.13.0 - avutil.h
 +2014-04-xx - xxxxxxx - lavu 53.13.0 / 52.78.100 - avutil.h
    Add av_get_time_base_q().
  
 -2014-04-xx - xxxxxxx - lavu 53.12.0 - crc.h
 +2014-04-xx - xxxxxxx - lavu 53.12.0 / 52.77.100 - crc.h
    Add AV_CRC_16_ANSI_LE crc variant.
  
 +2014-04-XX - xxxxxxx - lavf xx.xx.1xx - avformat.h
 +  Add av_format_inject_global_side_data()
 +
 +2014-04-12 - xxxxxxx - lavu 52.76.100 - log.h
 +  Add av_log_get_flags()
 +
 +2014-04-xx - xxxxxxx - lavd 55.12.100 - avdevice.h
 +  Add avdevice_capabilities_create() function.
 +  Add avdevice_capabilities_free() function.
 +
  2014-04-xx - xxxxxxx - lavu 53.11.0 - pixfmt.h
    Add AV_PIX_FMT_YVYU422 pixel format.
  
  2014-04-xx - xxxxxxx - lavu 53.09.0 - log.h
    Add AV_LOG(c) macro to have 256 color debug messages.
  
 +2014-04-xx - xxxxxxx - lavu 52.72.100 - opt.h
 +  Add AV_OPT_MULTI_COMPONENT_RANGE define to allow return
 +  multi-component option ranges.
 +
 +2014-03-xx - xxxxxxx - lavu 52.70.100 - mem.h
 +  Add av_dynarray_add_nofree() function.
 +
  2014-02-xx - xxxxxxx - lavu 53.08.0 - frame.h
    Add av_frame_remove_side_data() for removing a single side data
    instance from a frame.
    Give the name AVPacketSideData to the previously anonymous struct used for
    AVPacket.side_data.
  
 +2014-03-18 - 37c07d4 - lsws 2.5.102
 +  Make gray16 full-scale.
 +
  2014-xx-xx - xxxxxxx - lavu 53.06.0 - pixfmt.h
 -  Add RGBA64 pixel format and variants.
 +  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-xx-xx - xxxxxxx - lavu 53.05.0 - frame.h
 +2014-xx-xx - xxxxxx - 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-xx - xxxxxxx - 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-xx-xx - xxxxxxx - 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-xx-xx - xxxxxxx - 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.
  
 -2014-02-xx - xxxxxxx - lavu 53.3.0 - frame.h
 +2014-02-xx - xxxxxxx - lavd 55.10.100 - avdevice.h
 +  Add avdevice_list_devices() and avdevice_free_list_devices()
 +
 +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 - xxxxxxx - 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-11 - b9fb59d,9431356,d7b3ee9 - lavc 55.28.1 - avcodec.h
 +2013-12-22 - 911676c - lavu 52.59.100 - avstring.h
 +  Add av_strnlen() function.
 +
 +2013-12-09 - 64f73ac - lavu 52.57.100 - opencl.h
 +  Add av_opencl_benchmark() function.
 +
 +2013-11-30 - 82b2e9c - lavu 52.56.100 - ffversion.h
 +  Moves version.h to libavutil/ffversion.h.
 +  Install ffversion.h and make it public.
 +
 +2013-12-11 - 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
 +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 - 36cd017 - lavf 55.16.101 - avformat.h
 +  avformat_close_input() argument can be NULL and point on NULL.
 +
 +2013-08-29 - e31db62 - lavf 55.15.100 - avformat.h
 +  Add av_format_get_probe_score().
 +
 +2013-08-15 - 1e0e193 - lsws 2.5.100 -
 +  Add a sws_dither AVOption, allowing to set the dither algorithm used
 +
 +2013-08-11 - d404fe35 - lavc 55.27.100 - vdpau.h
 +  Add a render2 alternative to the render callback function.
 +
 +2013-08-11 - af05edc - lavc 55.26.100 - vdpau.h
 +  Add allocation function for AVVDPAUContext, allowing
 +  to extend it in the future without breaking ABI/API.
 +
 +2013-08-10 - 67a580f / 5a9a9d4 - lavc 55.25.100 / 55.16.0 - avcodec.h
    Extend AVPacket API with av_packet_unref, av_packet_ref,
    av_packet_move_ref, av_packet_copy_props, av_packet_free_side_data.
  
 -2013-08-05 - f824535 - lavc 55.13.0 - avcodec.h
 +2013-08-05 - 9547e3e / f824535 - lavc 55.22.100 / 55.13.0 - avcodec.h
    Deprecate the bitstream-related members from struct AVVDPAUContext.
 -  The bistream buffers no longer need to be explicitly freed.
 +  The bitstream buffers no longer need to be explicitly freed.
  
 -2013-08-05 - 549294f - lavc 55.12.0 - avcodec.h
 +2013-08-05 - 3b805dc / 549294f - lavc 55.21.100 / 55.12.0 - avcodec.h
    Deprecate the CODEC_CAP_HWACCEL_VDPAU codec capability. Use CODEC_CAP_HWACCEL
    and select the AV_PIX_FMT_VDPAU format with get_format() instead.
  
 -2013-08-05 - a0ad5d0 - lavu 52.14.0 - pixfmt.h
 +2013-08-05 - 4ee0984 / a0ad5d0 - lavu 52.41.100 / 52.14.0 - pixfmt.h
    Deprecate AV_PIX_FMT_VDPAU_*. Use AV_PIX_FMT_VDPAU instead.
  
 -2013-08-02 - a8b1927 - lavc 55.11.0 - avcodec.h
 +2013-08-02 - 82fdfe8 / a8b1927 - lavc 55.20.100 / 55.11.0 - avcodec.h
    Add output_picture_number to AVCodecParserContext.
  
 -2013-06-24 - 95d5246 - lavc 55.10.0 - avcodec.h
 +2013-07-23 - abc8110 - lavc 55.19.100 - avcodec.h
 +  Add avcodec_chroma_pos_to_enum()
 +  Add avcodec_enum_to_chroma_pos()
 +
 +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-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.
 +
 +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.
 +
 +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.
 +
 +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 - d8fd06c - lavu 52.3.0 - avstring.h
 +2012-12-29 - 2ce43b3 / d8fd06c - lavu 52.13.100 / 52.3.0 - avstring.h
    Add av_basename() and av_dirname().
  
 -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
 +2012-11-05 - 7d26be6 / dfde8a3 - lavu 52.5.100 / 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-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-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 - 3c90cc2 - lavfo 54.2.0
 +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
 +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-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-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.
 +
 +2011-06-19 - fd2c0a5 - lavfi 2.23.0 - avfilter.h
 +  Add layout negotiation fields and helper functions.
 +
 +  In particular, add in_chlayouts and out_chlayouts to AVFilterLink,
 +  and the functions:
 +  avfilter_set_common_sample_formats()
 +  avfilter_set_common_channel_layouts()
 +  avfilter_all_channel_layouts()
 +
 +2011-06-19 - 527ca39 - lavfi 2.22.0 - AVFilterFormats
 +  Change type of AVFilterFormats.formats from int * to int64_t *,
 +  and update formats handling API accordingly.
 +
 +  avfilter_make_format_list() still takes a int32_t array and converts
 +  it to int64_t. A new function, avfilter_make_format64_list(), that
 +  takes int64_t arrays has been added.
  
 -------------------------------8<-------------------------------------
 -                   0.7 branch was cut here
 ------------------------------>8--------------------------------------
 +2011-06-19 - 44f669e - lavfi 2.21.0 - vsink_buffer.h
 +  Add video sink buffer and vsink_buffer.h public header.
  
 -2011-06-16 - 05e84c9, 25de595 - lavf 53.2.0 - avformat.h
 +2011-06-12 - 9fdf772 - lavfi 2.18.0 - avcodec.h
 +  Add avfilter_get_video_buffer_ref_from_frame() function in
 +  libavfilter/avcodec.h.
 +
 +2011-06-12 - c535494 - lavfi 2.17.0 - avfiltergraph.h
 +  Add avfilter_inout_alloc() and avfilter_inout_free() functions.
 +
 +2011-06-12 - 6119b23 - lavfi 2.16.0 - avfilter_graph_parse()
 +  Change avfilter_graph_parse() signature.
 +
 +2011-06-23 - 686959e / 67e9ae1 - lavu 51.10.0 / 51.8.0 - attributes.h
 +  Add av_printf_format().
 +
 +2011-06-16 - 2905e3f / 05e84c9, 2905e3f / 25de595 - lavf 53.4.0 / 53.2.0 - avformat.h
    Add avformat_open_input and avformat_write_header().
    Deprecate av_open_input_stream, av_open_input_file,
    AVFormatParameters and av_write_header.
  
 -2011-06-16 - 7e83e1c, dc59ec5 - lavu 51.7.0 - opt.h
 +2011-06-16 - 2905e3f / 7e83e1c, 2905e3f / dc59ec5 - lavu 51.9.0 / 51.7.0 - opt.h
    Add av_opt_set_dict() and av_opt_find().
    Deprecate av_find_opt().
    Add AV_DICT_APPEND flag.
  
 -2011-06-10 - cb7c11c - lavu 51.6.0 - opt.h
 +2011-06-10 - 45fb647 / cb7c11c - lavu 51.6.0 - opt.h
    Add av_opt_flag_is_set().
  
 -2011-06-08 - d9f80ea - lavu 51.5.0 - AVMetadata
 +2011-06-10 - c381960 - lavfi 2.15.0 - avfilter_get_audio_buffer_ref_from_arrays
 +  Add avfilter_get_audio_buffer_ref_from_arrays() to avfilter.h.
 +
 +2011-06-09 - f9ecb84 / d9f80ea - lavu 51.8.0 - AVMetadata
    Move AVMetadata from lavf to lavu and rename it to
    AVDictionary -- new installed header dict.h.
    All av_metadata_* functions renamed to av_dict_*.
  
 -2011-06-07 - a6703fa - lavu 51.4.0 - av_get_bytes_per_sample()
 +2011-06-07 - d552f61 / a6703fa - lavu 51.8.0 - av_get_bytes_per_sample()
    Add av_get_bytes_per_sample() in libavutil/samplefmt.h.
    Deprecate av_get_bits_per_sample_fmt().
  
 -2011-06-05 - b39b062 - lavu 51.3.0 - opt.h
 +2011-06-05 - f956924 / b39b062 - lavu 51.8.0 - opt.h
    Add av_opt_free convenience function.
  
 -2011-05-28 - 0420bd7 - lavu 51.2.0 - pixdesc.h
 +2011-06-06 - 95a0242 - lavfi 2.14.0 - AVFilterBufferRefAudioProps
 +  Remove AVFilterBufferRefAudioProps.size, and use nb_samples in
 +  avfilter_get_audio_buffer() and avfilter_default_get_audio_buffer() in
 +  place of size.
 +
 +2011-06-06 - 0bc2cca - lavu 51.6.0 - av_samples_alloc()
 +  Switch nb_channels and nb_samples parameters order in
 +  av_samples_alloc().
 +
 +2011-06-06 - e1c7414 - lavu 51.5.0 - av_samples_*
 +  Change the data layout created by av_samples_fill_arrays() and
 +  av_samples_alloc().
 +
 +2011-06-06 - 27bcf55 - lavfi 2.13.0 - vsrc_buffer.h
 +  Make av_vsrc_buffer_add_video_buffer_ref() accepts an additional
 +  flags parameter in input.
 +
 +2011-06-03 - e977ca2 - lavfi 2.12.0 - avfilter_link_free()
 +  Add avfilter_link_free() function.
 +
 +2011-06-02 - 5ad38d9 - lavu 51.4.0 - av_force_cpu_flags()
 +  Add av_cpu_flags() in libavutil/cpu.h.
 +
 +2011-05-28 - e71f260 - lavu 51.3.0 - pixdesc.h
    Add av_get_pix_fmt_name() in libavutil/pixdesc.h, and deprecate
    avcodec_get_pix_fmt_name() in libavcodec/avcodec.h in its favor.
  
 -2011-05-25 - 30315a8 - lavf 53.1.0 - avformat.h
 +2011-05-25 - 39e4206 / 30315a8 - lavf 53.3.0 - avformat.h
    Add fps_probe_size to AVFormatContext.
  
 -2011-05-18 - 64150ff - lavc 53.4.0 - AVCodecContext.request_sample_fmt
 +2011-05-22 - 5ecdfd0 - lavf 53.2.0 - avformat.h
 +  Introduce avformat_alloc_output_context2() and deprecate
 +  avformat_alloc_output_context().
 +
 +2011-05-22 - 83db719 - lavfi 2.10.0 - vsrc_buffer.h
 +  Make libavfilter/vsrc_buffer.h public.
 +
 +2011-05-19 - c000a9f - lavfi 2.8.0 - avcodec.h
 +  Add av_vsrc_buffer_add_frame() to libavfilter/avcodec.h.
 +
 +2011-05-14 - 9fdf772 - lavfi 2.6.0 - avcodec.h
 +  Add avfilter_get_video_buffer_ref_from_frame() to libavfilter/avcodec.h.
 +
 +2011-05-18 - 75a37b5 / 64150ff - lavc 53.7.0 - AVCodecContext.request_sample_fmt
    Add request_sample_fmt field to AVCodecContext.
  
 -2011-05-10 - 188dea1 - lavc 53.3.0 - avcodec.h
 +2011-05-10 - 59eb12f / 188dea1 - lavc 53.6.0 - avcodec.h
    Deprecate AVLPCType and the following fields in
    AVCodecContext: lpc_coeff_precision, prediction_order_method,
    min_partition_order, max_partition_order, lpc_type, lpc_passes.
    Corresponding FLAC encoder options should be used instead.
  
 -2011-04-26 - bebe72f - lavu 51.1.0 - avutil.h
 +2011-05-07 - 9fdf772 - lavfi 2.5.0 - avcodec.h
 +  Add libavfilter/avcodec.h header and avfilter_copy_frame_props()
 +  function.
 +
 +2011-05-07 - 18ded93 - lavc 53.5.0 - AVFrame
 +  Add format field to AVFrame.
 +
 +2011-05-07 - 22333a6 - lavc 53.4.0 - AVFrame
 +  Add width and height fields to AVFrame.
 +
 +2011-05-01 - 35fe66a - lavfi 2.4.0 - avfilter.h
 +  Rename AVFilterBufferRefVideoProps.pixel_aspect to
 +  sample_aspect_ratio.
 +
 +2011-05-01 - 77e9dee - lavc 53.3.0 - AVFrame
 +  Add a sample_aspect_ratio field to AVFrame.
 +
 +2011-05-01 - 1ba5727 - lavc 53.2.0 - AVFrame
 +  Add a pkt_pos field to AVFrame.
 +
 +2011-04-29 - 35ceaa7 - lavu 51.2.0 - mem.h
 +  Add av_dynarray_add function for adding
 +  an element to a dynamic array.
 +
 +2011-04-26 - d7e5aeb / bebe72f - lavu 51.1.0 - avutil.h
    Add AVPictureType enum and av_get_picture_type_char(), deprecate
    FF_*_TYPE defines and av_get_pict_type_char() defined in
    libavcodec/avcodec.h.
  
 -2011-04-26 - 10d3940 - lavfi 2.3.0 - avfilter.h
 +2011-04-26 - d7e5aeb / 10d3940 - lavfi 2.3.0 - avfilter.h
    Add pict_type and key_frame fields to AVFilterBufferRefVideo.
  
 -2011-04-26 - 7a11c82 - lavfi 2.2.0 - vsrc_buffer
 +2011-04-26 - d7e5aeb / 7a11c82 - lavfi 2.2.0 - vsrc_buffer
    Add sample_aspect_ratio fields to vsrc_buffer arguments
  
 -2011-04-21 - 94f7451 - lavc 53.1.0 - avcodec.h
 +2011-04-21 - 8772156 / 94f7451 - lavc 53.1.0 - avcodec.h
    Add CODEC_CAP_SLICE_THREADS for codecs supporting sliced threading.
  
  2011-04-15 - lavc 52.120.0 - avcodec.h
    AVPacket structure got additional members for passing side information:
 -    4de339e introduce side information for AVPacket
 -    2d8591c make containers pass palette change in AVPacket
 +    c407984 / 4de339e introduce side information for AVPacket
 +    c407984 / 2d8591c make containers pass palette change in AVPacket
  
  2011-04-12 - lavf 52.107.0 - avio.h
    Avio cleanup, part II - deprecate the entire URLContext API:
 -    175389c add avio_check as a replacement for url_exist
 -    ff1ec0c add avio_pause and avio_seek_time as replacements
 +    c55780d / 175389c add avio_check as a replacement for url_exist
 +    9891004 / ff1ec0c add avio_pause and avio_seek_time as replacements
              for _av_url_read_fseek/fpause
 -    cdc6a87 deprecate av_protocol_next(), avio_enum_protocols
 +    d4d0932 / cdc6a87 deprecate av_protocol_next(), avio_enum_protocols
              should be used instead.
 -    80c6e23 rename url_set_interrupt_cb->avio_set_interrupt_cb.
 -    f87b1b3 rename open flags: URL_* -> AVIO_*
 -    f8270bb add avio_enum_protocols.
 -    5593f03 deprecate URLProtocol.
 -    c486dad deprecate URLContext.
 -    026e175 deprecate the typedef for URLInterruptCB
 -    8e76a19 deprecate av_register_protocol2.
 -    b840484 deprecate URL_PROTOCOL_FLAG_NESTED_SCHEME
 -    1305d93 deprecate av_url_read_seek
 -    fa104e1 deprecate av_url_read_pause
 -    727c7aa deprecate url_get_filename().
 -    5958df3 deprecate url_max_packet_size().
 -    1869ea0 deprecate url_get_file_handle().
 -    32a97d4 deprecate url_filesize().
 -    e52a914 deprecate url_close().
 -    58a48c6 deprecate url_seek().
 -    925e908 deprecate url_write().
 -    dce3756 deprecate url_read_complete().
 -    bc371ac deprecate url_read().
 -    0589da0 deprecate url_open().
 -    62eaaea deprecate url_connect.
 -    5652bb9 deprecate url_alloc.
 -    333e894 deprecate url_open_protocol
 -    e230705 deprecate url_poll and URLPollEntry
 -
 -2011-04-10 - lavu  50.40.0 - pixfmt.h
 -  Add PIX_FMT_BGR48LE and PIX_FMT_BGR48BE pixel formats
 +    c88caa5 / 80c6e23 rename url_set_interrupt_cb->avio_set_interrupt_cb.
 +    c88caa5 / f87b1b3 rename open flags: URL_* -> AVIO_*
 +    d4d0932 / f8270bb add avio_enum_protocols.
 +    d4d0932 / 5593f03 deprecate URLProtocol.
 +    d4d0932 / c486dad deprecate URLContext.
 +    d4d0932 / 026e175 deprecate the typedef for URLInterruptCB
 +    c88caa5 / 8e76a19 deprecate av_register_protocol2.
 +    11d7841 / b840484 deprecate URL_PROTOCOL_FLAG_NESTED_SCHEME
 +    11d7841 / 1305d93 deprecate av_url_read_seek
 +    11d7841 / fa104e1 deprecate av_url_read_pause
 +    434f248 / 727c7aa deprecate url_get_filename().
 +    434f248 / 5958df3 deprecate url_max_packet_size().
 +    434f248 / 1869ea0 deprecate url_get_file_handle().
 +    434f248 / 32a97d4 deprecate url_filesize().
 +    434f248 / e52a914 deprecate url_close().
 +    434f248 / 58a48c6 deprecate url_seek().
 +    434f248 / 925e908 deprecate url_write().
 +    434f248 / dce3756 deprecate url_read_complete().
 +    434f248 / bc371ac deprecate url_read().
 +    434f248 / 0589da0 deprecate url_open().
 +    434f248 / 62eaaea deprecate url_connect.
 +    434f248 / 5652bb9 deprecate url_alloc.
 +    434f248 / 333e894 deprecate url_open_protocol
 +    434f248 / e230705 deprecate url_poll and URLPollEntry
  
  2011-04-08 - lavf 52.106.0 - avformat.h
    Minor avformat.h cleanup:
 -    a9bf9d8 deprecate av_guess_image2_codec
 -    c3675df rename avf_sdp_create->av_sdp_create
 +    d4d0932 / a9bf9d8 deprecate av_guess_image2_codec
 +    d4d0932 / c3675df rename avf_sdp_create->av_sdp_create
  
  2011-04-03 - lavf 52.105.0 - avio.h
    Large-scale renaming/deprecating of AVIOContext-related functions:
 -    724f6a0 deprecate url_fdopen
 -    403ee83 deprecate url_open_dyn_packet_buf
 -    6dc7d80 rename url_close_dyn_buf       -> avio_close_dyn_buf
 -    b92c545 rename url_open_dyn_buf        -> avio_open_dyn_buf
 -    8978fed introduce an AVIOContext.seekable field as a replacement for
 +    2cae980 / 724f6a0 deprecate url_fdopen
 +    2cae980 / 403ee83 deprecate url_open_dyn_packet_buf
 +    2cae980 / 6dc7d80 rename url_close_dyn_buf       -> avio_close_dyn_buf
 +    2cae980 / b92c545 rename url_open_dyn_buf        -> avio_open_dyn_buf
 +    2cae980 / 8978fed introduce an AVIOContext.seekable field as a replacement for
              AVIOContext.is_streamed and url_is_streamed()
 -    b64030f deprecate get_checksum()
 -    4c4427a deprecate init_checksum()
 -    4ec153b deprecate udp_set_remote_url/get_local_port
 -    933e90a deprecate av_url_read_fseek/fpause
 -    8d9769a deprecate url_fileno
 -    b7f2fdd rename put_flush_packet -> avio_flush
 -    35f1023 deprecate url_close_buf
 -    83fddae deprecate url_open_buf
 -    d9d86e0 rename url_fprintf -> avio_printf
 -    59f65d9 deprecate url_setbufsize
 -    3e68b3b deprecate url_ferror
 -    66e5b1d deprecate url_feof
 +    1caa412 / b64030f deprecate get_checksum()
 +    1caa412 / 4c4427a deprecate init_checksum()
 +    2fd41c9 / 4ec153b deprecate udp_set_remote_url/get_local_port
 +    4fa0e24 / 933e90a deprecate av_url_read_fseek/fpause
 +    4fa0e24 / 8d9769a deprecate url_fileno
 +    0fecf26 / b7f2fdd rename put_flush_packet -> avio_flush
 +    0fecf26 / 35f1023 deprecate url_close_buf
 +    0fecf26 / 83fddae deprecate url_open_buf
 +    0fecf26 / d9d86e0 rename url_fprintf -> avio_printf
 +    0fecf26 / 59f65d9 deprecate url_setbufsize
 +    6947b0c / 3e68b3b deprecate url_ferror
      e8bb2e2 deprecate url_fget_max_packet_size
      76aa876 rename url_fsize -> avio_size
      e519753 deprecate url_fgetc
      b3db9ce deprecate get_partial_buffer
      8d9ac96 rename av_alloc_put_byte -> avio_alloc_context
  
 -2011-03-25 - 34b47d7 - lavc 52.115.0 - AVCodecContext.audio_service_type
 +2011-03-25 - 27ef7b1 / 34b47d7 - lavc 52.115.0 - AVCodecContext.audio_service_type
    Add audio_service_type field to AVCodecContext.
  
 +2011-03-17 - e309fdc - lavu 50.40.0 - pixfmt.h
 +  Add PIX_FMT_BGR48LE and PIX_FMT_BGR48BE pixel formats
 +
  2011-03-02 - 863c471 - lavf  52.103.0 - av_pkt_dump2, av_pkt_dump_log2
    Add new functions av_pkt_dump2, av_pkt_dump_log2 that uses the
    source stream timebase for outputting timestamps. Deprecate
  2011-02-10 - 12c14cd - lavf 52.99.0 - AVStream.disposition
    Add AV_DISPOSITION_HEARING_IMPAIRED and AV_DISPOSITION_VISUAL_IMPAIRED.
  
 -2011-02-09 - 5592734 - lavc 52.112.0 - avcodec_thread_init()
 +2011-02-09 - c0b102c - lavc 52.112.0 - avcodec_thread_init()
    Deprecate avcodec_thread_init()/avcodec_thread_free() use; instead
    set thread_count before calling avcodec_open.
  
 -2011-02-09 - 778b08a - lavc 52.111.0 - threading API
 +2011-02-09 - 37b00b4 - lavc 52.111.0 - threading API
    Add CODEC_CAP_FRAME_THREADS with new restrictions on get_buffer()/
    release_buffer()/draw_horiz_band() callbacks for appropriate codecs.
    Add thread_type and active_thread_type fields to AVCodecContext.
  2011-02-02 - dfd2a00 - lavu 50.37.0 - log.h
    Make av_dlog public.
  
 +2011-01-31 - 7b3ea55 - lavfi 1.76.0 - vsrc_buffer
 +  Add sample_aspect_ratio fields to vsrc_buffer arguments
 +
 +2011-01-31 - 910b5b8 - lavfi 1.75.0 - AVFilterLink sample_aspect_ratio
 +  Add sample_aspect_ratio field to AVFilterLink.
 +
  2011-01-15 - a242ac3 - lavfi 1.74.0 - AVFilterBufferRefAudioProps
    Rename AVFilterBufferRefAudioProps.samples_nb to nb_samples.
  
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"
@@@ -98,8 -97,7 +98,8 @@@
   *
   * If you add a codec ID to this list, add it so that
   * 1. no value of a existing codec ID changes (that would break ABI),
 - * 2. it is as close as possible to similar codecs.
 + * 2. Give it a value which when taken as ASCII is recognized uniquely by a human as this specific codec.
 + *    This ensures that 2 forks can independently add AVCodecIDs without producing conflicts.
   *
   * After adding new codec IDs, do not forget to add an entry to the codec
   * descriptor list and bump libavcodec minor version.
@@@ -280,50 -278,21 +280,50 @@@ enum AVCodecID 
      AV_CODEC_ID_MSS2,
      AV_CODEC_ID_VP9,
      AV_CODEC_ID_AIC,
 -    AV_CODEC_ID_ESCAPE130,
 -    AV_CODEC_ID_G2M,
 -    AV_CODEC_ID_WEBP,
 +    AV_CODEC_ID_ESCAPE130_DEPRECATED,
 +    AV_CODEC_ID_G2M_DEPRECATED,
 +    AV_CODEC_ID_WEBP_DEPRECATED,
      AV_CODEC_ID_HNM4_VIDEO,
 -    AV_CODEC_ID_HEVC,
 +    AV_CODEC_ID_HEVC_DEPRECATED,
      AV_CODEC_ID_FIC,
      AV_CODEC_ID_ALIAS_PIX,
 -    AV_CODEC_ID_BRENDER_PIX,
 -    AV_CODEC_ID_PAF_VIDEO,
 -    AV_CODEC_ID_EXR,
 -    AV_CODEC_ID_VP7,
 -    AV_CODEC_ID_SANM,
 -    AV_CODEC_ID_SGIRLE,
 -    AV_CODEC_ID_MVC1,
 -    AV_CODEC_ID_MVC2,
 +    AV_CODEC_ID_BRENDER_PIX_DEPRECATED,
 +    AV_CODEC_ID_PAF_VIDEO_DEPRECATED,
 +    AV_CODEC_ID_EXR_DEPRECATED,
 +    AV_CODEC_ID_VP7_DEPRECATED,
 +    AV_CODEC_ID_SANM_DEPRECATED,
 +    AV_CODEC_ID_SGIRLE_DEPRECATED,
 +    AV_CODEC_ID_MVC1_DEPRECATED,
 +    AV_CODEC_ID_MVC2_DEPRECATED,
 +
 +    AV_CODEC_ID_BRENDER_PIX= MKBETAG('B','P','I','X'),
 +    AV_CODEC_ID_Y41P       = MKBETAG('Y','4','1','P'),
 +    AV_CODEC_ID_ESCAPE130  = MKBETAG('E','1','3','0'),
 +    AV_CODEC_ID_EXR        = MKBETAG('0','E','X','R'),
 +    AV_CODEC_ID_AVRP       = MKBETAG('A','V','R','P'),
 +
 +    AV_CODEC_ID_012V       = MKBETAG('0','1','2','V'),
 +    AV_CODEC_ID_G2M        = MKBETAG( 0 ,'G','2','M'),
 +    AV_CODEC_ID_AVUI       = MKBETAG('A','V','U','I'),
 +    AV_CODEC_ID_AYUV       = MKBETAG('A','Y','U','V'),
 +    AV_CODEC_ID_TARGA_Y216 = MKBETAG('T','2','1','6'),
 +    AV_CODEC_ID_V308       = MKBETAG('V','3','0','8'),
 +    AV_CODEC_ID_V408       = MKBETAG('V','4','0','8'),
 +    AV_CODEC_ID_YUV4       = MKBETAG('Y','U','V','4'),
 +    AV_CODEC_ID_SANM       = MKBETAG('S','A','N','M'),
 +    AV_CODEC_ID_PAF_VIDEO  = MKBETAG('P','A','F','V'),
 +    AV_CODEC_ID_AVRN       = MKBETAG('A','V','R','n'),
 +    AV_CODEC_ID_CPIA       = MKBETAG('C','P','I','A'),
 +    AV_CODEC_ID_XFACE      = MKBETAG('X','F','A','C'),
 +    AV_CODEC_ID_SGIRLE     = MKBETAG('S','G','I','R'),
 +    AV_CODEC_ID_MVC1       = MKBETAG('M','V','C','1'),
 +    AV_CODEC_ID_MVC2       = MKBETAG('M','V','C','2'),
 +    AV_CODEC_ID_SNOW       = MKBETAG('S','N','O','W'),
 +    AV_CODEC_ID_WEBP       = MKBETAG('W','E','B','P'),
 +    AV_CODEC_ID_SMVJPEG    = MKBETAG('S','M','V','J'),
 +    AV_CODEC_ID_HEVC       = MKBETAG('H','2','6','5'),
 +#define AV_CODEC_ID_H265 AV_CODEC_ID_HEVC
 +    AV_CODEC_ID_VP7        = MKBETAG('V','P','7','0'),
  
      /* various PCM "codecs" */
      AV_CODEC_ID_FIRST_AUDIO = 0x10000,     ///< A dummy id pointing at the start of audio codecs
      AV_CODEC_ID_PCM_LXF,
      AV_CODEC_ID_S302M,
      AV_CODEC_ID_PCM_S8_PLANAR,
 -    AV_CODEC_ID_PCM_S24LE_PLANAR,
 -    AV_CODEC_ID_PCM_S32LE_PLANAR,
 +    AV_CODEC_ID_PCM_S24LE_PLANAR_DEPRECATED,
 +    AV_CODEC_ID_PCM_S32LE_PLANAR_DEPRECATED,
 +    AV_CODEC_ID_PCM_S24LE_PLANAR = MKBETAG(24,'P','S','P'),
 +    AV_CODEC_ID_PCM_S32LE_PLANAR = MKBETAG(32,'P','S','P'),
 +    AV_CODEC_ID_PCM_S16BE_PLANAR = MKBETAG('P','S','P',16),
  
      /* various ADPCM codecs */
      AV_CODEC_ID_ADPCM_IMA_QT = 0x11000,
      AV_CODEC_ID_ADPCM_IMA_ISS,
      AV_CODEC_ID_ADPCM_G722,
      AV_CODEC_ID_ADPCM_IMA_APC,
 -    AV_CODEC_ID_ADPCM_VIMA,
 +    AV_CODEC_ID_ADPCM_VIMA_DEPRECATED,
 +    AV_CODEC_ID_ADPCM_VIMA = MKBETAG('V','I','M','A'),
 +    AV_CODEC_ID_VIMA       = MKBETAG('V','I','M','A'),
 +    AV_CODEC_ID_ADPCM_AFC  = MKBETAG('A','F','C',' '),
 +    AV_CODEC_ID_ADPCM_IMA_OKI = MKBETAG('O','K','I',' '),
 +    AV_CODEC_ID_ADPCM_DTK  = MKBETAG('D','T','K',' '),
 +    AV_CODEC_ID_ADPCM_IMA_RAD = MKBETAG('R','A','D',' '),
 +    AV_CODEC_ID_ADPCM_G726LE = MKBETAG('6','2','7','G'),
  
      /* AMR */
      AV_CODEC_ID_AMR_NB = 0x12000,
      AV_CODEC_ID_RALF,
      AV_CODEC_ID_IAC,
      AV_CODEC_ID_ILBC,
 -    AV_CODEC_ID_OPUS,
 +    AV_CODEC_ID_OPUS_DEPRECATED,
      AV_CODEC_ID_COMFORT_NOISE,
 -    AV_CODEC_ID_TAK,
 +    AV_CODEC_ID_TAK_DEPRECATED,
      AV_CODEC_ID_METASOUND,
 -    AV_CODEC_ID_PAF_AUDIO,
 +    AV_CODEC_ID_PAF_AUDIO_DEPRECATED,
      AV_CODEC_ID_ON2AVC,
 +    AV_CODEC_ID_FFWAVESYNTH = MKBETAG('F','F','W','S'),
 +    AV_CODEC_ID_SONIC       = MKBETAG('S','O','N','C'),
 +    AV_CODEC_ID_SONIC_LS    = MKBETAG('S','O','N','L'),
 +    AV_CODEC_ID_PAF_AUDIO   = MKBETAG('P','A','F','A'),
 +    AV_CODEC_ID_OPUS        = MKBETAG('O','P','U','S'),
 +    AV_CODEC_ID_TAK         = MKBETAG('t','B','a','K'),
 +    AV_CODEC_ID_EVRC        = MKBETAG('s','e','v','c'),
 +    AV_CODEC_ID_SMV         = MKBETAG('s','s','m','v'),
 +    AV_CODEC_ID_DSD_LSBF    = MKBETAG('D','S','D','L'),
 +    AV_CODEC_ID_DSD_MSBF    = MKBETAG('D','S','D','M'),
 +    AV_CODEC_ID_DSD_LSBF_PLANAR = MKBETAG('D','S','D','1'),
 +    AV_CODEC_ID_DSD_MSBF_PLANAR = MKBETAG('D','S','D','8'),
  
      /* subtitle codecs */
      AV_CODEC_ID_FIRST_SUBTITLE = 0x17000,          ///< A dummy ID pointing at the start of subtitle codecs.
      AV_CODEC_ID_HDMV_PGS_SUBTITLE,
      AV_CODEC_ID_DVB_TELETEXT,
      AV_CODEC_ID_SRT,
 +    AV_CODEC_ID_MICRODVD   = MKBETAG('m','D','V','D'),
 +    AV_CODEC_ID_EIA_608    = MKBETAG('c','6','0','8'),
 +    AV_CODEC_ID_JACOSUB    = MKBETAG('J','S','U','B'),
 +    AV_CODEC_ID_SAMI       = MKBETAG('S','A','M','I'),
 +    AV_CODEC_ID_REALTEXT   = MKBETAG('R','T','X','T'),
 +    AV_CODEC_ID_SUBVIEWER1 = MKBETAG('S','b','V','1'),
 +    AV_CODEC_ID_SUBVIEWER  = MKBETAG('S','u','b','V'),
 +    AV_CODEC_ID_SUBRIP     = MKBETAG('S','R','i','p'),
 +    AV_CODEC_ID_WEBVTT     = MKBETAG('W','V','T','T'),
 +    AV_CODEC_ID_MPL2       = MKBETAG('M','P','L','2'),
 +    AV_CODEC_ID_VPLAYER    = MKBETAG('V','P','l','r'),
 +    AV_CODEC_ID_PJS        = MKBETAG('P','h','J','S'),
 +    AV_CODEC_ID_ASS        = MKBETAG('A','S','S',' '),  ///< ASS as defined in Matroska
  
      /* other specific kind of codecs (generally used for attachments) */
      AV_CODEC_ID_FIRST_UNKNOWN = 0x18000,           ///< A dummy ID pointing at the start of various fake codecs.
      AV_CODEC_ID_TTF = 0x18000,
 +    AV_CODEC_ID_BINTEXT    = MKBETAG('B','T','X','T'),
 +    AV_CODEC_ID_XBIN       = MKBETAG('X','B','I','N'),
 +    AV_CODEC_ID_IDF        = MKBETAG( 0 ,'I','D','F'),
 +    AV_CODEC_ID_OTF        = MKBETAG( 0 ,'O','T','F'),
 +    AV_CODEC_ID_SMPTE_KLV  = MKBETAG('K','L','V','A'),
 +    AV_CODEC_ID_DVD_NAV    = MKBETAG('D','N','A','V'),
 +    AV_CODEC_ID_TIMED_ID3  = MKBETAG('T','I','D','3'),
 +    AV_CODEC_ID_BIN_DATA   = MKBETAG('D','A','T','A'),
 +
  
      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_MPEG4SYSTEMS = 0x20001, /**< _FAKE_ codec to indicate a MPEG-4 Systems
                                  * stream (only used by libavformat) */
      AV_CODEC_ID_FFMETADATA = 0x21000,   ///< Dummy codec for streams containing only metadata information.
 +
 +#if FF_API_CODEC_ID
 +#include "old_codec_ids.h"
 +#endif
  };
  
  /**
@@@ -571,13 -492,6 +571,13 @@@ typedef struct AVCodecDescriptor 
       * Codec properties, a combination of AV_CODEC_PROP_* flags.
       */
      int             props;
 +
 +    /**
 +     * MIME type(s) associated with the codec.
 +     * May be NULL; if not, a NULL-terminated array of MIME types.
 +     * The first item is always non-NULL and is the prefered MIME type.
 +     */
 +    const char *const *mime_types;
  } AVCodecDescriptor;
  
  /**
   * Codec supports lossless compression. Audio and video codecs only.
   */
  #define AV_CODEC_PROP_LOSSLESS      (1 << 2)
 +/**
 + * 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 FF_INPUT_BUFFER_PADDING_SIZE 8
 +#define FF_INPUT_BUFFER_PADDING_SIZE 16
  
  /**
   * @ingroup lavc_encoding
@@@ -638,7 -542,6 +638,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
  };
  
  /**
@@@ -685,6 -588,27 +685,6 @@@ enum AVColorTransferCharacteristic
      AVCOL_TRC_NB               , ///< Not part of ABI
  };
  
 -enum AVColorSpace{
 -    AVCOL_SPC_RGB         =  0,
 -    AVCOL_SPC_BT709       =  1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B
 -    AVCOL_SPC_UNSPECIFIED =  2,
 -    AVCOL_SPC_FCC         =  4,
 -    AVCOL_SPC_BT470BG     =  5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601
 -    AVCOL_SPC_SMPTE170M   =  6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC / functionally identical to above
 -    AVCOL_SPC_SMPTE240M   =  7,
 -    AVCOL_SPC_YCOCG       =  8, ///< Used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16
 -    AVCOL_SPC_BT2020_NCL  =  9, ///< ITU-R BT2020 non-constant luminance system
 -    AVCOL_SPC_BT2020_CL   = 10, ///< ITU-R BT2020 constant luminance system
 -    AVCOL_SPC_NB              , ///< Not part of ABI
 -};
 -
 -enum AVColorRange{
 -    AVCOL_RANGE_UNSPECIFIED = 0,
 -    AVCOL_RANGE_MPEG        = 1, ///< the normal 219*2^(n-8) "MPEG" YUV ranges
 -    AVCOL_RANGE_JPEG        = 2, ///< the normal     2^n-1   "JPEG" YUV ranges
 -    AVCOL_RANGE_NB             , ///< Not part of ABI
 -};
 -
  /**
   *  X   X      3 4 X      X are luma samples,
   *             1 2        1-6 are possible chroma positions
@@@ -747,12 -671,13 +747,13 @@@ typedef struct RcOverride
  #define CODEC_FLAG_QPEL   0x0010  ///< Use qpel MC.
  #define CODEC_FLAG_GMC    0x0020  ///< Use GMC.
  #define CODEC_FLAG_MV0    0x0040  ///< Always try a MB with MV=<0,0>.
+ #if FF_API_INPUT_PRESERVED
  /**
-  * The parent program guarantees that the input for B-frames containing
-  * streams is not written to for at least s->max_b_frames+1 frames, if
-  * this is not set the input will be copied.
+  * @deprecated passing reference-counted frames to the encoders replaces this
+  * flag
   */
  #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_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_DROP_FRAME_TIMECODE 0x00002000 ///< timecode is in drop frame format. DEPRECATED!!!!
  #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_FLAG2_SHOW_ALL      0x00400000 ///< Show all frames before the first keyframe
  
  /* Unsupported options :
   *              Syntax Arithmetic coding (SAC)
  #define CODEC_CAP_DR1             0x0002
  #define CODEC_CAP_TRUNCATED       0x0008
  #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 */
  /**
   * Audio encoder supports receiving a different number of samples in each call.
   */
  #define CODEC_CAP_VARIABLE_FRAME_SIZE 0x10000
 +/**
 + * Codec is intra only.
 + */
 +#define CODEC_CAP_INTRA_ONLY       0x40000000
 +/**
 + * Codec is lossless.
 + */
 +#define CODEC_CAP_LOSSLESS         0x80000000
  
  #if FF_API_MB_TYPE
  //The following defines may change, don't expect compatibility if you use them.
@@@ -1033,70 -942,6 +1034,70 @@@ enum AVPacketSideDataType 
       * ReplayGain information in form of the AVReplayGain struct.
       */
      AV_PKT_DATA_REPLAYGAIN,
 +
 +    /**
 +     * 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,
  };
  
  typedef struct AVPacketSideData {
   * For video, it should typically contain one compressed frame. For audio it may
   * contain several compressed frames.
   *
 - * 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.
   *
@@@ -1225,8 -1070,6 +1226,8 @@@ enum AVFieldOrder 
   * New fields can be added to the end with minor version bumps.
   * Removal, reordering and changes to existing fields require a major
   * version bump.
 + * Please use AVOptions (av_opt* / av_set/get*()) to access these fields from user
 + * applications.
   * sizeof(AVCodecContext) must not be used outside libav*.
   */
  typedef struct AVCodecContext {
       * rv10: additional flags
       * mpeg4: global headers (they can be in the bitstream or here)
       * The allocated memory should be FF_INPUT_BUFFER_PADDING_SIZE bytes larger
 -     * than extradata_size to avoid prolems if it is read with the bitstream reader.
 +     * than extradata_size to avoid problems if it is read with the bitstream reader.
       * The bytewise contents of extradata must not depend on the architecture or CPU endianness.
       * - encoding: Set/allocated/freed by libavcodec.
       * - decoding: Set/allocated/freed by user.
      /**
       * 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.
       * - encoding: unused
       * - decoding: May be set by the user before opening the decoder if known
       *             e.g. from the container. During decoding, the decoder may
      /**
       * Pixel format, see AV_PIX_FMT_xxx.
       * May be set by the demuxer if known from headers.
 -     * May be overriden by the decoder if it knows better.
 +     * May be overridden by the decoder if it knows better.
       * - encoding: Set by user.
       * - decoding: Set by user if known, overridden by libavcodec if known
       */
      /**
       * Motion estimation algorithm used for video coding.
       * 1 (zero), 2 (full), 3 (log), 4 (phods), 5 (epzs), 6 (x1), 7 (hex),
 -     * 8 (umh), 10 (tesa) [7, 8, 10 are x264 specific]
 +     * 8 (umh), 9 (iter), 10 (tesa) [7, 8, 10 are x264 specific, 9 is snow specific]
       * - encoding: MUST be set by user.
       * - decoding: unused
       */
  #define FF_CMP_VSAD   8
  #define FF_CMP_VSSE   9
  #define FF_CMP_NSSE   10
 +#define FF_CMP_W53    11
 +#define FF_CMP_W97    12
  #define FF_CMP_DCTMAX 13
  #define FF_CMP_DCT264 14
  #define FF_CMP_CHROMA 256
       * XVideo Motion Acceleration
       * - encoding: forbidden
       * - decoding: set by decoder
 -     * @deprecated XvMC support is slated for removal.
 +     * @deprecated XvMC doesn't need it anymore.
       */
      attribute_deprecated int xvmc_acceleration;
  #endif /* FF_API_XVMC */
  
      /** 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.
  
      /**
       * ratecontrol qmin qmax limiting method
 -     * 0-> clipping, 1-> use a nice continuous function to limit qscale wthin qmin/qmax.
 +     * 0-> clipping, 1-> use a nice continuous function to limit qscale within qmin/qmax.
       * - encoding: Set by user.
       * - decoding: unused
       */
      int context_model;
  
      /**
 -     * minimum Lagrange multipler
 +     * minimum Lagrange multiplier
       * - encoding: Set by user.
       * - decoding: unused
       */
      int lmin;
  
      /**
 -     * maximum Lagrange multipler
 +     * maximum Lagrange multiplier
       * - encoding: Set by user.
       * - decoding: unused
       */
      int max_prediction_order;
  
      /**
 -     * GOP timecode frame start number, in non drop frame format
 -     * - encoding: Set by user.
 -     * - decoding: unused
 +     * GOP timecode frame start number
 +     * - encoding: Set by user, in non drop frame format
 +     * - decoding: Set by libavcodec (timecode in the 25 bits format, -1 if unset)
       */
      int64_t timecode_frame_start;
  
  #define FF_DEBUG_MMCO        0x00000800
  #define FF_DEBUG_BUGS        0x00001000
  #if FF_API_DEBUG_MV
 -#define FF_DEBUG_VIS_QP      0x00002000
 -#define FF_DEBUG_VIS_MB_TYPE 0x00004000
 +#define FF_DEBUG_VIS_QP      0x00002000 ///< only access through AVOptions from outside libavcodec
 +#define FF_DEBUG_VIS_MB_TYPE 0x00004000 ///< only access through AVOptions from outside libavcodec
  #endif
  #define FF_DEBUG_BUFFERS     0x00008000
  #define FF_DEBUG_THREADS     0x00010000
  
  #if FF_API_DEBUG_MV
      /**
 -     * @deprecated this option does not have any effect
 +     * debug
 +     * Code outside libavcodec should access this field using AVOptions
 +     * - encoding: Set by user.
 +     * - decoding: Set by user.
       */
 -    attribute_deprecated
      int debug_mv;
  #define FF_DEBUG_VIS_MV_P_FOR  0x00000001 //visualize forward predicted MVs of P frames
  #define FF_DEBUG_VIS_MV_B_FOR  0x00000002 //visualize forward predicted MVs of B frames
   * decoder returning an error.
   */
  #define AV_EF_CRCCHECK  (1<<0)
 -#define AV_EF_BITSTREAM (1<<1)
 -#define AV_EF_BUFFER    (1<<2)
 -#define AV_EF_EXPLODE   (1<<3)
 +#define AV_EF_BITSTREAM (1<<1)          ///< detect bitstream specification deviations
 +#define AV_EF_BUFFER    (1<<2)          ///< detect improper bitstream length
 +#define AV_EF_EXPLODE   (1<<3)          ///< abort decoding on minor error detection
 +
 +#define AV_EF_CAREFUL    (1<<16)        ///< consider things that violate the spec, are fast to calculate and have not been seen in the wild as errors
 +#define AV_EF_COMPLIANT  (1<<17)        ///< consider all spec non compliances as errors
 +#define AV_EF_AGGRESSIVE (1<<18)        ///< consider things that a sane encoder should not do as an error
 +
  
      /**
       * opaque 64bit number (generally a PTS) that will be reordered and
       * Hardware accelerator context.
       * For some hardware accelerators, a global context needs to be
       * provided by the user. In that case, this holds display-dependent
 -     * data Libav cannot instantiate itself. Please refer to the
 -     * Libav HW accelerator documentation to know how to fill this
 +     * data FFmpeg cannot instantiate itself. Please refer to the
 +     * FFmpeg HW accelerator documentation to know how to fill this
       * is. e.g. for VA API, this is a struct vaapi_context.
       * - encoding: unused
       * - decoding: Set by user
       * low resolution decoding, 1-> 1/2 size, 2->1/4 size
       * - encoding: unused
       * - decoding: Set by user.
 -     *
 -     * @deprecated use decoder private options instead
 +     * Code outside libavcodec should access this field using:
 +     * av_codec_{get,set}_lowres(avctx)
       */
 -    attribute_deprecated int lowres;
 +     int lowres;
  #endif
  
      /**
  #endif
  
      /**
 -     * noise vs. sse weight for the nsse comparsion function
 +     * noise vs. sse weight for the nsse comparison function
       * - encoding: Set by user.
       * - decoding: unused
       */
  #define FF_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.
       */
       * - decoding: unused.
       */
      uint64_t vbv_delay;
 +
 +    /**
 +     * Timebase in which pkt_dts/pts and AVPacket.dts/pts are.
 +     * Code outside libavcodec should access this field using:
 +     * av_codec_{get,set}_pkt_timebase(avctx)
 +     * - encoding unused.
 +     * - decoding set by user.
 +     */
 +    AVRational pkt_timebase;
 +
 +    /**
 +     * AVCodecDescriptor
 +     * Code outside libavcodec should access this field using:
 +     * av_codec_{get,set}_codec_descriptor(avctx)
 +     * - encoding: unused.
 +     * - decoding: set by libavcodec.
 +     */
 +    const AVCodecDescriptor *codec_descriptor;
 +
 +#if !FF_API_LOWRES
 +    /**
 +     * low resolution decoding, 1-> 1/2 size, 2->1/4 size
 +     * - encoding: unused
 +     * - decoding: Set by user.
 +     * Code outside libavcodec should access this field using:
 +     * av_codec_{get,set}_lowres(avctx)
 +     */
 +     int lowres;
 +#endif
 +
 +    /**
 +     * Current statistics for PTS correction.
 +     * - decoding: maintained and used by libavcodec, not intended to be used by user apps
 +     * - encoding: unused
 +     */
 +    int64_t pts_correction_num_faulty_pts; /// Number of incorrect PTS values so far
 +    int64_t pts_correction_num_faulty_dts; /// Number of incorrect DTS values so far
 +    int64_t pts_correction_last_pts;       /// PTS of the last frame
 +    int64_t pts_correction_last_dts;       /// DTS of the last frame
 +
 +    /**
 +     * Character encoding of the input subtitles file.
 +     * - decoding: set by user
 +     * - encoding: unused
 +     */
 +    char *sub_charenc;
 +
 +    /**
 +     * Subtitles character encoding mode. Formats or codecs might be adjusting
 +     * this setting (if they are doing the conversion themselves for instance).
 +     * - decoding: set by libavcodec
 +     * - encoding: unused
 +     */
 +    int sub_charenc_mode;
 +#define FF_SUB_CHARENC_MODE_DO_NOTHING  -1  ///< do nothing (demuxer outputs a stream supposed to be already in UTF-8, or the codec is bitmap for instance)
 +#define FF_SUB_CHARENC_MODE_AUTOMATIC    0  ///< libavcodec will select the mode itself
 +#define FF_SUB_CHARENC_MODE_PRE_DECODER  1  ///< the AVPacket data needs to be recoded to UTF-8 before being fed to the decoder, requires iconv
 +
 +    /**
 +     * Skip processing alpha if supported by codec.
 +     * Note that if the format uses pre-multiplied alpha (common with VP6,
 +     * and recommended due to better video quality/compression)
 +     * the image will look as if alpha-blended onto a black background.
 +     * However for formats that do not use pre-multiplied alpha
 +     * there might be serious artefacts (though e.g. libswscale currently
 +     * assumes pre-multiplied alpha anyway).
 +     * Code outside libavcodec should access this field using AVOptions
 +     *
 +     * - decoding: set by user
 +     * - encoding: unused
 +     */
 +    int skip_alpha;
 +
 +    /**
 +     * Number of samples to skip after a discontinuity
 +     * - decoding: unused
 +     * - encoding: set by libavcodec
 +     */
 +    int seek_preroll;
 +
 +#if !FF_API_DEBUG_MV
 +    /**
 +     * debug motion vectors
 +     * Code outside libavcodec should access this field using AVOptions
 +     * - encoding: Set by user.
 +     * - decoding: Set by user.
 +     */
 +    int debug_mv;
 +#define FF_DEBUG_VIS_MV_P_FOR  0x00000001 //visualize forward predicted MVs of P frames
 +#define FF_DEBUG_VIS_MV_B_FOR  0x00000002 //visualize forward predicted MVs of B frames
 +#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames
 +#endif
 +
 +    /**
 +     * custom intra quantization matrix
 +     * Code outside libavcodec should access this field using av_codec_g/set_chroma_intra_matrix()
 +     * - encoding: Set by user, can be NULL.
 +     * - decoding: unused.
 +     */
 +    uint16_t *chroma_intra_matrix;
  } 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);
 +
 +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.
   */
@@@ -3097,7 -2808,7 +3098,7 @@@ typedef struct AVCodec 
      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
 +    uint8_t max_lowres;                     ///< maximum value for lowres supported by the decoder, no direct access, use av_codec_get_max_lowres()
  #endif
      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}
      void (*flush)(AVCodecContext *);
  } AVCodec;
  
 +int av_codec_get_max_lowres(const AVCodec *codec);
 +
 +struct MpegEncContext;
 +
  /**
   * AVHWAccel.
   */
@@@ -3230,7 -2937,6 +3231,7 @@@ typedef struct AVHWAccel 
       *
       * 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
       * AVCodecContext.release_buffer().
       */
      int 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);
  } AVHWAccel;
  
  /**
   */
  
  /**
 - * four components are given, that's all.
 - * the last component is alpha
 + * Picture data structure.
 + *
 + * Up to four components can be stored into it, the last component is
 + * alpha.
   */
  typedef struct AVPicture {
 -    uint8_t *data[AV_NUM_DATA_POINTERS];
 +    uint8_t *data[AV_NUM_DATA_POINTERS];    ///< pointers to the image data planes
      int linesize[AV_NUM_DATA_POINTERS];     ///< number of bytes per line
  } AVPicture;
  
   * @}
   */
  
 -#define AVPALETTE_SIZE 1024
 -#define AVPALETTE_COUNT 256
 -
  enum AVSubtitleType {
      SUBTITLE_NONE,
  
@@@ -3331,11 -3027,10 +3332,11 @@@ typedef struct AVSubtitleRect 
  
      /**
       * 0 terminated ASS/SSA compatible event line.
 -     * The pressentation of this is unaffected by the other values in this
 +     * The presentation of this is unaffected by the other values in this
       * struct.
       */
      char *ass;
 +
      int flags;
  } AVSubtitleRect;
  
@@@ -3428,22 -3123,6 +3429,22 @@@ int avcodec_get_context_defaults3(AVCod
   */
  const AVClass *avcodec_get_class(void);
  
 +/**
 + * Get the AVClass for AVFrame. It can be used in combination with
 + * AV_OPT_SEARCH_FAKE_OBJ for examining options.
 + *
 + * @see av_opt_find().
 + */
 +const AVClass *avcodec_get_frame_class(void);
 +
 +/**
 + * Get the AVClass for AVSubtitleRect. It can be used in combination with
 + * AV_OPT_SEARCH_FAKE_OBJ for examining options.
 + *
 + * @see av_opt_find().
 + */
 +const AVClass *avcodec_get_subtitle_rect_class(void);
 +
  /**
   * Copy the settings of the source AVCodecContext into the destination
   * AVCodecContext. The resulting destination codec context will be
   * can use this AVCodecContext to decode/encode video/audio data.
   *
   * @param dest target codec context, should be initialized with
 - *             avcodec_alloc_context3(), but otherwise uninitialized
 + *             avcodec_alloc_context3(NULL), but otherwise uninitialized
   * @param src source codec context
   * @return AVERROR() on error (e.g. memory allocation error), 0 on success
   */
@@@ -3621,20 -3300,6 +3622,20 @@@ int av_packet_from_data(AVPacket *pkt, 
   */
  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.
   *
@@@ -3675,29 -3340,6 +3676,29 @@@ int av_packet_shrink_side_data(AVPacke
  uint8_t* av_packet_get_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
                                   int *size);
  
 +int av_packet_merge_side_data(AVPacket *pkt);
 +
 +int av_packet_split_side_data(AVPacket *pkt);
 +
 +/**
 + * 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.
@@@ -3722,7 -3364,7 +3723,7 @@@ void av_packet_free_side_data(AVPacket 
   *
   * @return 0 on success, a negative AVERROR on error.
   */
 -int av_packet_ref(AVPacket *dst, AVPacket *src);
 +int av_packet_ref(AVPacket *dst, const AVPacket *src);
  
  /**
   * Wipe the packet.
@@@ -3830,88 -3472,6 +3831,88 @@@ void avcodec_align_dimensions(AVCodecCo
  void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height,
                                 int linesize_align[AV_NUM_DATA_POINTERS]);
  
 +/**
 + * Converts AVChromaLocation to swscale x/y chroma position.
 + *
 + * The positions represent the chroma (0,0) position in a coordinates system
 + * with luma (0,0) representing the origin and luma(1,1) representing 256,256
 + *
 + * @param xpos  horizontal chroma sample position
 + * @param ypos  vertical   chroma sample position
 + */
 +int avcodec_enum_to_chroma_pos(int *xpos, int *ypos, enum AVChromaLocation pos);
 +
 +/**
 + * Converts swscale x/y chroma position to AVChromaLocation.
 + *
 + * The positions represent the chroma (0,0) position in a coordinates system
 + * with luma (0,0) representing the origin and luma(1,1) representing 256,256
 + *
 + * @param xpos  horizontal chroma sample position
 + * @param ypos  vertical   chroma sample position
 + */
 +enum AVChromaLocation avcodec_chroma_pos_to_enum(int xpos, int ypos);
 +
 +#if FF_API_OLD_DECODE_AUDIO
 +/**
 + * Wrapper function which calls avcodec_decode_audio4.
 + *
 + * @deprecated Use avcodec_decode_audio4 instead.
 + *
 + * Decode the audio frame of size avpkt->size from avpkt->data into samples.
 + * Some decoders may support multiple frames in a single AVPacket, such
 + * decoders would then just decode the first frame. In this case,
 + * avcodec_decode_audio3 has to be called again with an AVPacket that contains
 + * the remaining data in order to decode the second frame etc.
 + * If no frame
 + * could be outputted, frame_size_ptr is zero. Otherwise, it is the
 + * decompressed frame size in bytes.
 + *
 + * @warning You must set frame_size_ptr to the allocated size of the
 + * output buffer before calling avcodec_decode_audio3().
 + *
 + * @warning The input buffer must be FF_INPUT_BUFFER_PADDING_SIZE larger than
 + * the actual read bytes because some optimized bitstream readers read 32 or 64
 + * bits at once and could read over the end.
 + *
 + * @warning The end of the input buffer avpkt->data should be set to 0 to ensure that
 + * no overreading happens for damaged MPEG streams.
 + *
 + * @warning You must not provide a custom get_buffer() when using
 + * avcodec_decode_audio3().  Doing so will override it with
 + * avcodec_default_get_buffer.  Use avcodec_decode_audio4() instead,
 + * which does allow the application to provide a custom get_buffer().
 + *
 + * @note You might have to align the input buffer avpkt->data and output buffer
 + * samples. The alignment requirements depend on the CPU: On some CPUs it isn't
 + * necessary at all, on others it won't work at all if not aligned and on others
 + * it will work but it will have an impact on performance.
 + *
 + * In practice, avpkt->data should have 4 byte alignment at minimum and
 + * samples should be 16 byte aligned unless the CPU doesn't need it
 + * (AltiVec and SSE do).
 + *
 + * @note Codecs which have the CODEC_CAP_DELAY capability set have a delay
 + * between input and output, these need to be fed with avpkt->data=NULL,
 + * avpkt->size=0 at the end to return the remaining frames.
 + *
 + * @param avctx the codec context
 + * @param[out] samples the output buffer, sample type in avctx->sample_fmt
 + *                     If the sample format is planar, each channel plane will
 + *                     be the same size, with no padding between channels.
 + * @param[in,out] frame_size_ptr the output buffer size in bytes
 + * @param[in] avpkt The input AVPacket containing the input buffer.
 + *            You can create such packet with av_init_packet() and by then setting
 + *            data and size, some decoders might in addition need other fields.
 + *            All decoders are designed to use the least fields possible though.
 + * @return On error a negative value is returned, otherwise the number of bytes
 + * used or zero if no frame data was decompressed (used) from the input AVPacket.
 + */
 +attribute_deprecated int avcodec_decode_audio3(AVCodecContext *avctx, int16_t *samples,
 +                         int *frame_size_ptr,
 +                         AVPacket *avpkt);
 +#endif
 +
  /**
   * Decode the audio frame of size avpkt->size from avpkt->data into frame.
   *
   *         AVPacket is returned.
   */
  int avcodec_decode_audio4(AVCodecContext *avctx, AVFrame *frame,
 -                          int *got_frame_ptr, AVPacket *avpkt);
 +                          int *got_frame_ptr, const AVPacket *avpkt);
  
  /**
   * Decode the video frame of size avpkt->size from avpkt->data into picture.
   *             next call to this function or until closing or flushing the
   *             decoder. The caller may not write to it.
   *
 - * @param[in] avpkt The input AVpacket containing the input buffer.
 + * @param[in] avpkt The input AVPacket containing the input buffer.
   *            You can create such packet with av_init_packet() and by then setting
   *            data and size, some decoders might in addition need other fields like
   *            flags&AV_PKT_FLAG_KEY. All decoders are designed to use the least
   */
  int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture,
                           int *got_picture_ptr,
 -                         AVPacket *avpkt);
 +                         const AVPacket *avpkt);
  
  /**
   * Decode a subtitle message.
   * and reusing a get_buffer written for video codecs would probably perform badly
   * due to a potentially very different allocation pattern.
   *
 + * Some decoders (those marked with CODEC_CAP_DELAY) have a delay between input
 + * and output. This means that for some packets they will not immediately
 + * produce decoded output and need to be flushed at the end of decoding to get
 + * all the decoded data. Flushing is done by calling this function with packets
 + * with avpkt->data set to NULL and avpkt->size set to 0 until it stops
 + * returning subtitles. It is safe to flush even those decoders that are not
 + * marked with CODEC_CAP_DELAY, then no subtitles will be returned.
 + *
   * @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.
@@@ -4085,7 -3637,6 +4086,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];
@@@ -4258,7 -3809,7 +4259,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,
@@@ -4292,36 -3843,6 +4293,36 @@@ AVCodec *avcodec_find_encoder(enum AVCo
   */
  AVCodec *avcodec_find_encoder_by_name(const char *name);
  
 +#if FF_API_OLD_ENCODE_AUDIO
 +/**
 + * Encode an audio frame from samples into buf.
 + *
 + * @deprecated Use avcodec_encode_audio2 instead.
 + *
 + * @note The output buffer should be at least FF_MIN_BUFFER_SIZE bytes large.
 + * However, for codecs with avctx->frame_size equal to 0 (e.g. PCM) the user
 + * will know how much space is needed because it depends on the value passed
 + * in buf_size as described below. In that case a lower value can be used.
 + *
 + * @param avctx the codec context
 + * @param[out] buf the output buffer
 + * @param[in] buf_size the output buffer size
 + * @param[in] samples the input buffer containing the samples
 + * The number of samples read from this buffer is frame_size*channels,
 + * both of which are defined in avctx.
 + * For codecs which have avctx->frame_size equal to 0 (e.g. PCM) the number of
 + * samples read from samples is equal to:
 + * buf_size * 8 / (avctx->channels * av_get_bits_per_sample(avctx->codec_id))
 + * This also implies that av_get_bits_per_sample() must not return 0 for these
 + * codecs.
 + * @return On error a negative value is returned, on success zero or the number
 + * of bytes used to encode the data read from the input buffer.
 + */
 +int attribute_deprecated avcodec_encode_audio(AVCodecContext *avctx,
 +                                              uint8_t *buf, int buf_size,
 +                                              const short *samples);
 +#endif
 +
  /**
   * Encode a frame of audio.
   *
   *                  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_free_packet() (i.e. avpkt->destruct will be
  int avcodec_encode_audio2(AVCodecContext *avctx, AVPacket *avpkt,
                            const AVFrame *frame, int *got_packet_ptr);
  
 +#if FF_API_OLD_ENCODE_VIDEO
 +/**
 + * @deprecated use avcodec_encode_video2() instead.
 + *
 + * Encode a video frame from pict into buf.
 + * The input picture should be
 + * stored using a specific format, namely avctx.pix_fmt.
 + *
 + * @param avctx the codec context
 + * @param[out] buf the output buffer for the bitstream of encoded frame
 + * @param[in] buf_size the size of the output buffer in bytes
 + * @param[in] pict the input picture to encode
 + * @return On error a negative value is returned, on success zero or the number
 + * of bytes used from the output buffer.
 + */
 +attribute_deprecated
 +int avcodec_encode_video(AVCodecContext *avctx, uint8_t *buf, int buf_size,
 +                         const AVFrame *pict);
 +#endif
 +
  /**
   * Encode a frame of video.
   *
@@@ -4429,121 -3929,21 +4430,121 @@@ 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
 +
  /**
   * @addtogroup lavc_picture
   * @{
   */
  
  /**
 - * Allocate memory for a picture.  Call avpicture_free() to free it.
 + * Allocate memory for the pixels of a picture and setup the AVPicture
 + * fields for it.
 + *
 + * Call avpicture_free() to free it.
   *
 - * @see avpicture_fill()
 + * @param picture            the picture structure to be filled in
 + * @param pix_fmt            the pixel format of the picture
 + * @param width              the width of the picture
 + * @param height             the height of the picture
 + * @return zero if successful, a negative error code otherwise
   *
 - * @param picture the picture to be filled in
 - * @param pix_fmt the format of the picture
 - * @param width the width of the picture
 - * @param height the height of the picture
 - * @return zero if successful, a negative value if not
 + * @see av_image_alloc(), avpicture_fill()
   */
  int avpicture_alloc(AVPicture *picture, enum AVPixelFormat pix_fmt, int width, int height);
  
  void avpicture_free(AVPicture *picture);
  
  /**
 - * Fill in the AVPicture fields.
 - * The fields of the given AVPicture are filled in by using the 'ptr' address
 - * which points to the image data buffer. Depending on the specified picture
 - * format, one or multiple image data pointers and line sizes will be set.
 - * If a planar format is specified, several pointers will be set pointing to
 - * the different picture planes and the line sizes of the different planes
 - * will be stored in the lines_sizes array.
 - * Call with ptr == NULL to get the required size for the ptr buffer.
 + * Setup the picture fields based on the specified image parameters
 + * and the provided image data buffer.
   *
 - * To allocate the buffer and fill in the AVPicture fields in one call,
 + * The picture fields are filled in by using the image data buffer
 + * pointed to by ptr.
 + *
 + * If ptr is NULL, the function will fill only the picture linesize
 + * array and return the required size for the image buffer.
 + *
 + * To allocate an image buffer and fill the picture data in one call,
   * use avpicture_alloc().
   *
 - * @param picture AVPicture whose fields are to be filled in
 - * @param ptr Buffer which will contain or contains the actual image data
 - * @param pix_fmt The format in which the picture data is stored.
 - * @param width the width of the image in pixels
 - * @param height the height of the image in pixels
 - * @return size of the image data in bytes
 + * @param picture       the picture to be filled in
 + * @param ptr           buffer where the image data is stored, or NULL
 + * @param pix_fmt       the pixel format of the image
 + * @param width         the width of the image in pixels
 + * @param height        the height of the image in pixels
 + * @return the size in bytes required for src, a negative error code
 + * in case of failure
 + *
 + * @see av_image_fill_arrays()
   */
 -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);
  
  /**
   * Copy pixel data from an AVPicture into a buffer.
 - * The data is stored compactly, without any gaps for alignment or padding
 - * which may be applied by avpicture_fill().
   *
 - * @see avpicture_get_size()
 + * avpicture_get_size() can be used to compute the required size for
 + * the buffer to fill.
   *
 - * @param[in] src AVPicture containing image data
 - * @param[in] pix_fmt The format in which the picture data is stored.
 - * @param[in] width the width of the image in pixels.
 - * @param[in] height the height of the image in pixels.
 - * @param[out] dest A buffer into which picture data will be copied.
 - * @param[in] dest_size The size of 'dest'.
 - * @return The number of bytes written to dest, or a negative value (error code) on error.
 + * @param src        source picture with filled data
 + * @param pix_fmt    picture pixel format
 + * @param width      picture width
 + * @param height     picture height
 + * @param dest       destination buffer
 + * @param dest_size  destination buffer size in bytes
 + * @return the number of bytes written to dest, or a negative value
 + * (error code) on error, for example if the destination buffer is not
 + * big enough
 + *
 + * @see av_image_copy_to_buffer()
   */
 -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);
  
  /**
   * Calculate the size in bytes that a picture of the given width and height
   * would occupy if stored in the given picture format.
 - * Note that this returns the size of a compact representation as generated
 - * by avpicture_layout(), which can be smaller than the size required for e.g.
 - * avpicture_fill().
   *
 - * @param pix_fmt the given picture format
 - * @param width the width of the image
 - * @param height the height of the image
 - * @return Image data size in bytes or -1 on error (e.g. too large dimensions).
 + * @param pix_fmt    picture pixel format
 + * @param width      picture width
 + * @param height     picture height
 + * @return the computed picture buffer size or a negative error code
 + * in case of error
 + *
 + * @see av_image_get_buffer_size().
   */
  int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height);
  
@@@ -4629,7 -4023,7 +4630,7 @@@ int avpicture_deinterlace(AVPicture *ds
                            enum AVPixelFormat pix_fmt, int width, int height);
  #endif
  /**
 - * Copy image src to dst. Wraps av_picture_data_copy() above.
 + * Copy image src to dst. Wraps av_image_copy().
   */
  void av_picture_copy(AVPicture *dst, const AVPicture *src,
                       enum AVPixelFormat pix_fmt, int width, int height);
@@@ -4667,21 -4061,10 +4668,21 @@@ int av_picture_pad(AVPicture *dst, cons
   */
  
  /**
 - * @deprecated Use av_pix_fmt_get_chroma_sub_sample
 + * Utility function to access log2_chroma_w log2_chroma_h from
 + * the pixel format AVPixFmtDescriptor.
 + *
 + * This function asserts that pix_fmt is valid. See av_pix_fmt_get_chroma_sub_sample
 + * for one that returns a failure code and continues in case of invalid
 + * pix_fmts.
 + *
 + * @param[in]  pix_fmt the pixel format
 + * @param[out] h_shift store log2_chroma_w
 + * @param[out] v_shift store log2_chroma_h
 + *
 + * @see av_pix_fmt_get_chroma_sub_sample
   */
  
 -void attribute_deprecated avcodec_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, int *h_shift, int *v_shift);
 +void avcodec_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, int *h_shift, int *v_shift);
  
  /**
   * Return a value representing the fourCC code associated to the
   */
  unsigned int avcodec_pix_fmt_to_codec_tag(enum AVPixelFormat pix_fmt);
  
 -#define FF_LOSS_RESOLUTION  0x0001 /**< loss due to resolution change */
 -#define FF_LOSS_DEPTH       0x0002 /**< loss due to color depth change */
 -#define FF_LOSS_COLORSPACE  0x0004 /**< loss due to color space conversion */
 -#define FF_LOSS_ALPHA       0x0008 /**< loss of alpha bits */
 -#define FF_LOSS_COLORQUANT  0x0010 /**< loss due to color quantization */
 -#define FF_LOSS_CHROMA      0x0020 /**< loss of chroma (e.g. RGB to gray conversion) */
 -
 -/**
 - * Compute what kind of losses will occur when converting from one specific
 - * pixel format to another.
 - * When converting from one pixel format to another, information loss may occur.
 - * For example, when converting from RGB24 to GRAY, the color information will
 - * be lost. Similarly, other losses occur when converting from some formats to
 - * other formats. These losses can involve loss of chroma, but also loss of
 - * resolution, loss of color depth, loss due to the color space conversion, loss
 - * of the alpha bits or loss due to color quantization.
 - * avcodec_get_fix_fmt_loss() informs you about the various types of losses
 - * which will occur when converting from one pixel format to another.
 - *
 - * @param[in] dst_pix_fmt destination pixel format
 - * @param[in] src_pix_fmt source pixel format
 - * @param[in] has_alpha Whether the source pixel format alpha channel is used.
 - * @return Combination of flags informing you what kind of losses will occur.
 +/**
 + * @deprecated see av_get_pix_fmt_loss()
   */
  int avcodec_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt, enum AVPixelFormat src_pix_fmt,
                               int has_alpha);
   * format.  When converting from one pixel format to another, information loss
   * may occur.  For example, when converting from RGB24 to GRAY, the color
   * information will be lost. Similarly, other losses occur when converting from
 - * some formats to other formats. avcodec_find_best_pix_fmt2() searches which of
 + * some formats to other formats. avcodec_find_best_pix_fmt_of_2() searches which of
   * the given pixel formats should be used to suffer the least amount of loss.
   * The pixel formats from which it chooses one, are determined by the
   * pix_fmt_list parameter.
   * @param[out] loss_ptr Combination of flags informing you what kind of losses will occur.
   * @return The best pixel format to convert to or -1 if none was found.
   */
 -enum AVPixelFormat avcodec_find_best_pix_fmt2(enum AVPixelFormat *pix_fmt_list,
 +enum AVPixelFormat avcodec_find_best_pix_fmt_of_list(const enum AVPixelFormat *pix_fmt_list,
 +                                            enum AVPixelFormat src_pix_fmt,
 +                                            int has_alpha, int *loss_ptr);
 +
 +/**
 + * @deprecated see av_find_best_pix_fmt_of_2()
 + */
 +enum AVPixelFormat avcodec_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2,
 +                                            enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr);
 +
 +attribute_deprecated
 +#if AV_HAVE_INCOMPATIBLE_LIBAV_ABI
 +enum AVPixelFormat avcodec_find_best_pix_fmt2(const enum AVPixelFormat *pix_fmt_list,
                                                enum AVPixelFormat src_pix_fmt,
                                                int has_alpha, int *loss_ptr);
 +#else
 +enum AVPixelFormat avcodec_find_best_pix_fmt2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2,
 +                                            enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr);
 +#endif
 +
  
  enum AVPixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum AVPixelFormat * fmt);
  
@@@ -4775,12 -4162,7 +4776,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,
@@@ -4820,14 -4200,6 +4821,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
@@@ -4868,97 -4240,27 +4869,97 @@@ typedef struct AVBitStreamFilter 
      struct AVBitStreamFilter *next;
  } AVBitStreamFilter;
  
 +/**
 + * Register a bitstream filter.
 + *
 + * The filter will be accessible to the application code through
 + * av_bitstream_filter_next() or can be directly initialized with
 + * av_bitstream_filter_init().
 + *
 + * @see avcodec_register_all()
 + */
  void av_register_bitstream_filter(AVBitStreamFilter *bsf);
 +
 +/**
 + * Create and initialize a bitstream filter context given a bitstream
 + * filter name.
 + *
 + * The returned context must be freed with av_bitstream_filter_close().
 + *
 + * @param name    the name of the bitstream filter
 + * @return a bitstream filter context if a matching filter was found
 + * and successfully initialized, NULL otherwise
 + */
  AVBitStreamFilterContext *av_bitstream_filter_init(const char *name);
 +
 +/**
 + * Filter bitstream.
 + *
 + * This function filters the buffer buf with size buf_size, and places the
 + * filtered buffer in the buffer pointed to by poutbuf.
 + *
 + * The output buffer must be freed by the caller.
 + *
 + * @param bsfc            bitstream filter context created by av_bitstream_filter_init()
 + * @param avctx           AVCodecContext accessed by the filter, may be NULL.
 + *                        If specified, this must point to the encoder context of the
 + *                        output stream the packet is sent to.
 + * @param args            arguments which specify the filter configuration, may be NULL
 + * @param poutbuf         pointer which is updated to point to the filtered buffer
 + * @param poutbuf_size    pointer which is updated to the filtered buffer size in bytes
 + * @param buf             buffer containing the data to filter
 + * @param buf_size        size in bytes of buf
 + * @param keyframe        set to non-zero if the buffer to filter corresponds to a key-frame packet data
 + * @return >= 0 in case of success, or a negative error code in case of failure
 + *
 + * If the return value is positive, an output buffer is allocated and
 + * is availble 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).
 + */
  int av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc,
                                 AVCodecContext *avctx, const char *args,
                                 uint8_t **poutbuf, int *poutbuf_size,
                                 const uint8_t *buf, int buf_size, int keyframe);
 +
 +/**
 + * Release bitstream filter context.
 + *
 + * @param bsf the bitstream filter context created with
 + * av_bitstream_filter_init(), can be NULL
 + */
  void av_bitstream_filter_close(AVBitStreamFilterContext *bsf);
  
 +/**
 + * If f is NULL, return the first registered bitstream filter,
 + * if f is non-NULL, return the next registered bitstream filter
 + * after f, or NULL if f is the last one.
 + *
 + * This function can be used to iterate over all registered bitstream
 + * filters.
 + */
  AVBitStreamFilter *av_bitstream_filter_next(AVBitStreamFilter *f);
  
  /* memory */
  
  /**
 - * Allocate a buffer with padding, reusing the given one if large enough.
 - *
   * Same behaviour av_fast_malloc but the buffer has additional
 - * FF_INPUT_PADDING_SIZE at the end which will always memset to 0.
 + * FF_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.
   *
@@@ -4971,7 -4273,7 +4972,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
@@@ -4987,7 -4289,7 +4988,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
@@@ -5027,7 -4329,7 +5028,7 @@@ enum AVLockOp 
   * lockmgr should store/get a pointer to a user allocated mutex. It's
   * NULL upon AV_LOCK_CREATE and != NULL for all other ops.
   *
 - * @param cb User defined callback. Note: Libav may invoke calls to this
 + * @param cb User defined callback. Note: FFmpeg may invoke calls to this
   *           callback during the call to av_lockmgr_register().
   *           Thus, the application must be prepared to handle that.
   *           If cb is set to NULL the lockmgr will be unregistered.
@@@ -5041,12 -4343,6 +5042,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.
@@@ -5,20 -5,20 +5,20 @@@
   *
   * 4MV & hq & B-frame encoding stuff by Michael Niedermayer <michaelni@gmx.at>
   *
 - * This file is part of Libav.
 + * This file is part of FFmpeg.
   *
 - * Libav is free software; you can redistribute it and/or
 + * FFmpeg is free software; you can redistribute it and/or
   * modify it under the terms of the GNU Lesser General Public
   * License as published by the Free Software Foundation; either
   * version 2.1 of the License, or (at your option) any later version.
   *
 - * Libav is distributed in the hope that it will be useful,
 + * FFmpeg is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   * Lesser General Public License for more details.
   *
   * You should have received a copy of the GNU Lesser General Public
 - * License along with Libav; if not, write to the Free Software
 + * License along with FFmpeg; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
   */
  
@@@ -54,7 -54,6 +54,7 @@@
  #include "internal.h"
  #include "bytestream.h"
  #include <limits.h>
 +#include "sp5x.h"
  
  static int encode_picture(MpegEncContext *s, int picture_number);
  static int dct_quantize_refine(MpegEncContext *s, int16_t *block, int16_t *weight, int16_t *orig, int n, int qscale);
@@@ -104,7 -103,8 +104,7 @@@ void ff_convert_matrix(DSPContext *dsp
                   *           3444240 >= (1 << 36) / (x) >= 275 */
  
                  qmat[qscale][i] = (int)((UINT64_C(1) << (QMAT_SHIFT + 14)) /
 -                                        (ff_aanscales[i] * qscale *
 -                                         quant_matrix[j]));
 +                                        (ff_aanscales[i] * (int64_t)qscale * quant_matrix[j]));
              }
          } else {
              for (i = 0; i < 64; i++) {
@@@ -224,23 -224,6 +224,23 @@@ static void MPV_encode_defaults(MpegEnc
      s->picture_in_gop_number = 0;
  }
  
 +av_cold int ff_dct_encode_init(MpegEncContext *s) {
 +    if (ARCH_X86)
 +        ff_dct_encode_init_x86(s);
 +
 +    if (CONFIG_H263_ENCODER)
 +        ff_h263dsp_init(&s->h263dsp);
 +    if (!s->dct_quantize)
 +        s->dct_quantize = ff_dct_quantize_c;
 +    if (!s->denoise_dct)
 +        s->denoise_dct  = denoise_dct_c;
 +    s->fast_dct_quantize = s->dct_quantize;
 +    if (s->avctx->trellis)
 +        s->dct_quantize  = dct_quantize_trellis_c;
 +
 +    return 0;
 +}
 +
  /* init video encoder */
  av_cold int ff_MPV_encode_init(AVCodecContext *avctx)
  {
          }
          break;
      case AV_CODEC_ID_MJPEG:
 +    case AV_CODEC_ID_AMV:
          if (avctx->pix_fmt != AV_PIX_FMT_YUVJ420P &&
              avctx->pix_fmt != AV_PIX_FMT_YUVJ422P &&
 +            avctx->pix_fmt != AV_PIX_FMT_YUVJ444P &&
              ((avctx->pix_fmt != AV_PIX_FMT_YUV420P &&
 -              avctx->pix_fmt != AV_PIX_FMT_YUV422P) ||
 +              avctx->pix_fmt != AV_PIX_FMT_YUV422P &&
 +              avctx->pix_fmt != AV_PIX_FMT_YUV444P) ||
               avctx->strict_std_compliance > FF_COMPLIANCE_UNOFFICIAL)) {
              av_log(avctx, AV_LOG_ERROR, "colorspace not supported in jpeg\n");
              return -1;
      }
  
      switch (avctx->pix_fmt) {
 +    case AV_PIX_FMT_YUVJ444P:
 +    case AV_PIX_FMT_YUV444P:
 +        s->chroma_format = CHROMA_444;
 +        break;
      case AV_PIX_FMT_YUVJ422P:
      case AV_PIX_FMT_YUV422P:
          s->chroma_format = CHROMA_422;
      s->height   = avctx->height;
      if (avctx->gop_size > 600 &&
          avctx->strict_std_compliance > FF_COMPLIANCE_EXPERIMENTAL) {
 -        av_log(avctx, AV_LOG_ERROR,
 -               "Warning keyframe interval too large! reducing it ...\n");
 +        av_log(avctx, AV_LOG_WARNING,
 +               "keyframe interval too large!, reducing it from %d to %d\n",
 +               avctx->gop_size, 600);
          avctx->gop_size = 600;
      }
      s->gop_size     = avctx->gop_size;
      if (avctx->max_b_frames > MAX_B_FRAMES) {
          av_log(avctx, AV_LOG_ERROR, "Too many B-frames requested, maximum "
                 "is %d.\n", MAX_B_FRAMES);
 +        avctx->max_b_frames = MAX_B_FRAMES;
      }
      s->max_b_frames = avctx->max_b_frames;
      s->codec_id     = avctx->codec->id;
      s->loop_filter      = !!(s->flags & CODEC_FLAG_LOOP_FILTER);
  
      if (avctx->rc_max_rate && !avctx->rc_buffer_size) {
 -        av_log(avctx, AV_LOG_ERROR,
 -               "a vbv buffer size is needed, "
 -               "for encoding with a maximum bitrate\n");
 -        return -1;
 +        switch(avctx->codec_id) {
 +        case AV_CODEC_ID_MPEG1VIDEO:
 +        case AV_CODEC_ID_MPEG2VIDEO:
 +            avctx->rc_buffer_size = FFMAX(avctx->rc_max_rate, 15000000) * 112L / 15000000 * 16384;
 +            break;
 +        case AV_CODEC_ID_MPEG4:
 +        case AV_CODEC_ID_MSMPEG4V1:
 +        case AV_CODEC_ID_MSMPEG4V2:
 +        case AV_CODEC_ID_MSMPEG4V3:
 +            if       (avctx->rc_max_rate >= 15000000) {
 +                avctx->rc_buffer_size = 320 + (avctx->rc_max_rate - 15000000L) * (760-320) / (38400000 - 15000000);
 +            } else if(avctx->rc_max_rate >=  2000000) {
 +                avctx->rc_buffer_size =  80 + (avctx->rc_max_rate -  2000000L) * (320- 80) / (15000000 -  2000000);
 +            } else if(avctx->rc_max_rate >=   384000) {
 +                avctx->rc_buffer_size =  40 + (avctx->rc_max_rate -   384000L) * ( 80- 40) / ( 2000000 -   384000);
 +            } else
 +                avctx->rc_buffer_size = 40;
 +            avctx->rc_buffer_size *= 16384;
 +            break;
 +        }
 +        if (avctx->rc_buffer_size) {
 +            av_log(avctx, AV_LOG_INFO, "Automatically choosing VBV buffer size of %d kbyte\n", avctx->rc_buffer_size/8192);
 +        }
 +    }
 +
 +    if ((!avctx->rc_max_rate) != (!avctx->rc_buffer_size)) {
 +        av_log(avctx, AV_LOG_ERROR, "Either both buffer size and max rate or neither must be specified\n");
 +        if (avctx->rc_max_rate && !avctx->rc_buffer_size)
 +            return -1;
      }
  
      if (avctx->rc_min_rate && avctx->rc_max_rate != avctx->rc_min_rate) {
      }
  
      if (avctx->rc_max_rate && avctx->rc_max_rate < avctx->bit_rate) {
 -        av_log(avctx, AV_LOG_INFO, "bitrate above max bitrate\n");
 +        av_log(avctx, AV_LOG_ERROR, "bitrate above max bitrate\n");
          return -1;
      }
  
      if (!s->fixed_qscale &&
          avctx->bit_rate * av_q2d(avctx->time_base) >
              avctx->bit_rate_tolerance) {
 -        av_log(avctx, AV_LOG_ERROR,
 -               "bitrate tolerance too small for bitrate\n");
 -        return -1;
 +        av_log(avctx, AV_LOG_WARNING,
 +               "bitrate tolerance %d too small for bitrate %d, overriding\n", avctx->bit_rate_tolerance, avctx->bit_rate);
 +        avctx->bit_rate_tolerance = 5 * avctx->bit_rate * av_q2d(avctx->time_base);
      }
  
      if (s->avctx->rc_max_rate &&
          av_log(avctx, AV_LOG_ERROR, "b frames not supported by codec\n");
          return -1;
      }
 +    if (s->max_b_frames < 0) {
 +        av_log(avctx, AV_LOG_ERROR,
 +               "max b frames must be 0 or positive for mpegvideo based encoders\n");
 +        return -1;
 +    }
  
      if ((s->codec_id == AV_CODEC_ID_MPEG4 ||
           s->codec_id == AV_CODEC_ID_H263  ||
           s->codec_id == AV_CODEC_ID_H263P) &&
          (avctx->sample_aspect_ratio.num > 255 ||
           avctx->sample_aspect_ratio.den > 255)) {
 -        av_log(avctx, AV_LOG_ERROR,
 -               "Invalid pixel aspect ratio %i/%i, limit is 255/255\n",
 +        av_log(avctx, AV_LOG_WARNING,
 +               "Invalid pixel aspect ratio %i/%i, limit is 255/255 reducing\n",
                 avctx->sample_aspect_ratio.num, avctx->sample_aspect_ratio.den);
 +        av_reduce(&avctx->sample_aspect_ratio.num, &avctx->sample_aspect_ratio.den,
 +                   avctx->sample_aspect_ratio.num,  avctx->sample_aspect_ratio.den, 255);
 +    }
 +
 +    if ((s->codec_id == AV_CODEC_ID_H263  ||
 +         s->codec_id == AV_CODEC_ID_H263P) &&
 +        (avctx->width  > 2048 ||
 +         avctx->height > 1152 )) {
 +        av_log(avctx, AV_LOG_ERROR, "H.263 does not support resolutions above 2048x1152\n");
 +        return -1;
 +    }
 +    if ((s->codec_id == AV_CODEC_ID_H263  ||
 +         s->codec_id == AV_CODEC_ID_H263P) &&
 +        ((avctx->width &3) ||
 +         (avctx->height&3) )) {
 +        av_log(avctx, AV_LOG_ERROR, "w/h must be a multiple of 4\n");
          return -1;
      }
  
 +    if (s->codec_id == AV_CODEC_ID_MPEG1VIDEO &&
 +        (avctx->width  > 4095 ||
 +         avctx->height > 4095 )) {
 +        av_log(avctx, AV_LOG_ERROR, "MPEG-1 does not support resolutions above 4095x4095\n");
 +        return -1;
 +    }
 +
 +    if (s->codec_id == AV_CODEC_ID_MPEG2VIDEO &&
 +        (avctx->width  > 16383 ||
 +         avctx->height > 16383 )) {
 +        av_log(avctx, AV_LOG_ERROR, "MPEG-2 does not support resolutions above 16383x16383\n");
 +        return -1;
 +    }
 +
 +    if (s->codec_id == AV_CODEC_ID_RV10 &&
 +        (avctx->width &15 ||
 +         avctx->height&15 )) {
 +        av_log(avctx, AV_LOG_ERROR, "width and height must be a multiple of 16\n");
 +        return AVERROR(EINVAL);
 +    }
 +
 +    if (s->codec_id == AV_CODEC_ID_RV20 &&
 +        (avctx->width &3 ||
 +         avctx->height&3 )) {
 +        av_log(avctx, AV_LOG_ERROR, "width and height must be a multiple of 4\n");
 +        return AVERROR(EINVAL);
 +    }
 +
 +    if ((s->codec_id == AV_CODEC_ID_WMV1 ||
 +         s->codec_id == AV_CODEC_ID_WMV2) &&
 +         avctx->width & 1) {
 +         av_log(avctx, AV_LOG_ERROR, "width must be multiple of 2\n");
 +         return -1;
 +    }
 +
      if ((s->flags & (CODEC_FLAG_INTERLACED_DCT | CODEC_FLAG_INTERLACED_ME)) &&
          s->codec_id != AV_CODEC_ID_MPEG4 && s->codec_id != AV_CODEC_ID_MPEG2VIDEO) {
          av_log(avctx, AV_LOG_ERROR, "interlacing not supported by codec\n");
      }
  
      // FIXME mpeg2 uses that too
 -    if (s->mpeg_quant && s->codec_id != AV_CODEC_ID_MPEG4) {
 +    if (s->mpeg_quant && (   s->codec_id != AV_CODEC_ID_MPEG4
 +                          && s->codec_id != AV_CODEC_ID_MPEG2VIDEO)) {
          av_log(avctx, AV_LOG_ERROR,
                 "mpeg2 style quantization not supported by codec\n");
          return -1;
          s->codec_id != AV_CODEC_ID_MPEG4      &&
          s->codec_id != AV_CODEC_ID_MPEG1VIDEO &&
          s->codec_id != AV_CODEC_ID_MPEG2VIDEO &&
 +        s->codec_id != AV_CODEC_ID_MJPEG      &&
          (s->codec_id != AV_CODEC_ID_H263P)) {
          av_log(avctx, AV_LOG_ERROR,
                 "multi threaded encoding not supported by codec\n");
  
      if (s->avctx->thread_count < 1) {
          av_log(avctx, AV_LOG_ERROR,
 -               "automatic thread number detection not supported by codec,"
 +               "automatic thread number detection not supported by codec, "
                 "patch welcome\n");
          return -1;
      }
  
 -    if (s->avctx->thread_count > 1)
 +    if (s->avctx->slices > 1 || s->avctx->thread_count > 1)
          s->rtp_mode = 1;
  
 +    if (s->avctx->thread_count > 1 && s->codec_id == AV_CODEC_ID_H263P)
 +        s->h263_slice_structured = 1;
 +
      if (!avctx->time_base.den || !avctx->time_base.num) {
          av_log(avctx, AV_LOG_ERROR, "framerate not set\n");
          return -1;
          //return -1;
      }
  
 -    if (s->mpeg_quant || s->codec_id == AV_CODEC_ID_MPEG1VIDEO ||
 -        s->codec_id == AV_CODEC_ID_MPEG2VIDEO || s->codec_id == AV_CODEC_ID_MJPEG) {
 +    if (s->mpeg_quant || s->codec_id == AV_CODEC_ID_MPEG1VIDEO || s->codec_id == AV_CODEC_ID_MPEG2VIDEO || s->codec_id == AV_CODEC_ID_MJPEG || s->codec_id==AV_CODEC_ID_AMV) {
          // (a + x * 3 / 8) / x
          s->intra_quant_bias = 3 << (QUANT_BIAS_SHIFT - 3);
          s->inter_quant_bias = 0;
          s->inter_quant_bias = -(1 << (QUANT_BIAS_SHIFT - 2));
      }
  
 +    if (avctx->qmin > avctx->qmax || avctx->qmin <= 0) {
 +        av_log(avctx, AV_LOG_ERROR, "qmin and or qmax are invalid, they must be 0 < min <= max\n");
 +        return AVERROR(EINVAL);
 +    }
 +
      if (avctx->intra_quant_bias != FF_DEFAULT_QUANT_BIAS)
          s->intra_quant_bias = avctx->intra_quant_bias;
      if (avctx->inter_quant_bias != FF_DEFAULT_QUANT_BIAS)
          s->inter_quant_bias = avctx->inter_quant_bias;
  
 +    av_log(avctx, AV_LOG_DEBUG, "intra_quant_bias = %d inter_quant_bias = %d\n",s->intra_quant_bias,s->inter_quant_bias);
 +
      if (avctx->codec_id == AV_CODEC_ID_MPEG4 &&
          s->avctx->time_base.den > (1 << 16) - 1) {
          av_log(avctx, AV_LOG_ERROR,
          s->rtp_mode   = 1;
          break;
      case AV_CODEC_ID_MJPEG:
 +    case AV_CODEC_ID_AMV:
          s->out_format = FMT_MJPEG;
          s->intra_only = 1; /* force intra only for jpeg */
          if (!CONFIG_MJPEG_ENCODER ||
          break;
      case AV_CODEC_ID_H263:
          if (!CONFIG_H263_ENCODER)
 -        return -1;
 +            return -1;
          if (ff_match_2uint16(ff_h263_format, FF_ARRAY_ELEMS(ff_h263_format),
                               s->width, s->height) == 8) {
 -            av_log(avctx, AV_LOG_INFO,
 +            av_log(avctx, AV_LOG_ERROR,
                     "The specified picture size of %dx%d is not valid for "
                     "the H.263 codec.\nValid sizes are 128x96, 176x144, "
 -                   "352x288, 704x576, and 1408x1152."
 +                   "352x288, 704x576, and 1408x1152. "
                     "Try H.263+.\n", s->width, s->height);
              return -1;
          }
      if (ff_MPV_common_init(s) < 0)
          return -1;
  
 -    if (ARCH_X86)
 -        ff_MPV_encode_init_x86(s);
 -
      s->avctx->coded_frame = s->current_picture.f;
  
      if (s->msmpeg4_version) {
      FF_ALLOCZ_OR_GOTO(s->avctx, s->avctx->stats_out, 256, fail);
  
      FF_ALLOCZ_OR_GOTO(s->avctx, s->q_intra_matrix,   64 * 32 * sizeof(int), fail);
 +    FF_ALLOCZ_OR_GOTO(s->avctx, s->q_chroma_intra_matrix, 64 * 32 * sizeof(int), fail);
      FF_ALLOCZ_OR_GOTO(s->avctx, s->q_inter_matrix,   64 * 32 * sizeof(int), fail);
      FF_ALLOCZ_OR_GOTO(s->avctx, s->q_intra_matrix16, 64 * 32 * 2 * sizeof(uint16_t), fail);
 +    FF_ALLOCZ_OR_GOTO(s->avctx, s->q_chroma_intra_matrix16, 64 * 32 * 2 * sizeof(uint16_t), fail);
      FF_ALLOCZ_OR_GOTO(s->avctx, s->q_inter_matrix16, 64 * 32 * 2 * sizeof(uint16_t), fail);
      FF_ALLOCZ_OR_GOTO(s->avctx, s->input_picture,
                        MAX_PICTURE_COUNT * sizeof(Picture *), fail);
                            2 * 64 * sizeof(uint16_t), fail);
      }
  
 -    if (CONFIG_H263_ENCODER)
 -        ff_h263dsp_init(&s->h263dsp);
 -    if (!s->dct_quantize)
 -        s->dct_quantize = ff_dct_quantize_c;
 -    if (!s->denoise_dct)
 -        s->denoise_dct  = denoise_dct_c;
 -    s->fast_dct_quantize = s->dct_quantize;
 -    if (avctx->trellis)
 -        s->dct_quantize  = dct_quantize_trellis_c;
 +    ff_dct_encode_init(s);
  
      if ((CONFIG_H263P_ENCODER || CONFIG_RV20_ENCODER) && s->modified_quant)
          s->chroma_qscale_table = ff_h263_chroma_qscale_table;
@@@ -935,10 -825,6 +935,10 @@@ av_cold int ff_MPV_encode_end(AVCodecCo
      av_freep(&s->avctx->stats_out);
      av_freep(&s->ac_stats);
  
 +    if(s->q_chroma_intra_matrix   != s->q_intra_matrix  ) av_freep(&s->q_chroma_intra_matrix);
 +    if(s->q_chroma_intra_matrix16 != s->q_intra_matrix16) av_freep(&s->q_chroma_intra_matrix16);
 +    s->q_chroma_intra_matrix=   NULL;
 +    s->q_chroma_intra_matrix16= NULL;
      av_freep(&s->q_intra_matrix);
      av_freep(&s->q_inter_matrix);
      av_freep(&s->q_intra_matrix16);
@@@ -1003,17 -889,18 +1003,17 @@@ static int load_input_picture(MpegEncCo
  
          if (pts != AV_NOPTS_VALUE) {
              if (s->user_specified_pts != AV_NOPTS_VALUE) {
 -                int64_t time = pts;
                  int64_t last = s->user_specified_pts;
  
 -                if (time <= last) {
 +                if (pts <= last) {
                      av_log(s->avctx, AV_LOG_ERROR,
 -                           "Error, Invalid timestamp=%"PRId64", "
 -                           "last=%"PRId64"\n", pts, s->user_specified_pts);
 -                    return -1;
 +                           "Invalid pts (%"PRId64") <= last (%"PRId64")\n",
 +                           pts, last);
 +                    return AVERROR(EINVAL);
                  }
  
                  if (!s->low_delay && display_picture_number == 1)
 -                    s->dts_delta = time - last;
 +                    s->dts_delta = pts - last;
              }
              s->user_specified_pts = pts;
          } else {
      }
  
      if (pic_arg) {
 -        if (!pic_arg->buf[0]);
 +        if (!pic_arg->buf[0])
              direct = 0;
          if (pic_arg->linesize[0] != s->linesize)
              direct = 0;
              direct = 0;
          if (pic_arg->linesize[2] != s->uvlinesize)
              direct = 0;
 +        if ((s->width & 15) || (s->height & 15))
 +            direct = 0;
 +        if (((intptr_t)(pic_arg->data[0])) & (STRIDE_ALIGN-1))
 +            direct = 0;
 +        if (s->linesize & (STRIDE_ALIGN-1))
 +            direct = 0;
  
 -        av_dlog(s->avctx, "%d %d %td %td\n", pic_arg->linesize[0],
 +        av_dlog(s->avctx, "%d %d %"PTRDIFF_SPECIFIER" %"PTRDIFF_SPECIFIER"\n", pic_arg->linesize[0],
                  pic_arg->linesize[1], s->linesize, s->uvlinesize);
  
          if (direct) {
                      uint8_t *src = pic_arg->data[i];
                      uint8_t *dst = pic->f->data[i];
  
 +                    if (s->codec_id == AV_CODEC_ID_AMV && !(s->avctx->flags & CODEC_FLAG_EMU_EDGE)) {
 +                        h = ((s->height + 15)/16*16) >> v_shift;
 +                    }
 +
                      if (!s->avctx->rc_buffer_size)
                          dst += INPLACE_OFFSET;
  
                      if (src_stride == dst_stride)
                          memcpy(dst, src, src_stride * h);
                      else {
 -                        while (h--) {
 -                            memcpy(dst, src, w);
 -                            dst += dst_stride;
 +                        int h2 = h;
 +                        uint8_t *dst2 = dst;
 +                        while (h2--) {
 +                            memcpy(dst2, src, w);
 +                            dst2 += dst_stride;
                              src += src_stride;
                          }
                      }
 +                    if ((s->width & 15) || (s->height & 15)) {
 +                        s->dsp.draw_edges(dst, dst_stride,
 +                                          w, h,
 +                                          16>>h_shift,
 +                                          16>>v_shift,
 +                                          EDGE_BOTTOM);
 +                    }
                  }
              }
          }
@@@ -1154,23 -1022,19 +1154,23 @@@ static int skip_check(MpegEncContext *s
                  uint8_t *rptr = ref->f->data[plane] + 8 * (x + y * stride);
                  int v   = s->dsp.frame_skip_cmp[1](s, dptr, rptr, stride, 8);
  
 -                switch (s->avctx->frame_skip_exp) {
 +                switch (FFABS(s->avctx->frame_skip_exp)) {
                  case 0: score    =  FFMAX(score, v);          break;
                  case 1: score   += FFABS(v);                  break;
 -                case 2: score   += v * v;                     break;
 -                case 3: score64 += FFABS(v * v * (int64_t)v); break;
 -                case 4: score64 += v * v * (int64_t)(v * v);  break;
 +                case 2: score64 += v * (int64_t)v;                       break;
 +                case 3: score64 += FFABS(v * (int64_t)v * v);            break;
 +                case 4: score64 += (v * (int64_t)v) * (v * (int64_t)v);  break;
                  }
              }
          }
      }
 +    emms_c();
  
      if (score)
          score64 = score;
 +    if (s->avctx->frame_skip_exp < 0)
 +        score64 = pow(score64 / (double)(s->mb_width * s->mb_height),
 +                      -1.0/s->avctx->frame_skip_exp);
  
      if (score64 < s->avctx->frame_skip_threshold)
          return 1;
@@@ -1203,7 -1067,7 +1203,7 @@@ static int estimate_best_b_count(MpegEn
      int64_t best_rd  = INT64_MAX;
      int best_b_count = -1;
  
 -    assert(scale >= 0 && scale <= 3);
 +    av_assert0(scale >= 0 && scale <= 3);
  
      //emms_c();
      //s->next_picture_ptr->quality;
  
      c->width        = s->width  >> scale;
      c->height       = s->height >> scale;
-     c->flags        = CODEC_FLAG_QSCALE | CODEC_FLAG_PSNR |
-                       CODEC_FLAG_INPUT_PRESERVED;
+     c->flags        = CODEC_FLAG_QSCALE | CODEC_FLAG_PSNR;
      c->flags       |= s->avctx->flags & CODEC_FLAG_QPEL;
      c->mb_decision  = s->avctx->mb_decision;
      c->me_cmp       = s->avctx->me_cmp;
@@@ -1313,19 -1176,6 +1312,19 @@@ static int select_input_picture(MpegEnc
  
      /* set next picture type & ordering */
      if (s->reordered_input_picture[0] == NULL && s->input_picture[0]) {
 +        if (s->avctx->frame_skip_threshold || s->avctx->frame_skip_factor) {
 +            if (s->picture_in_gop_number < s->gop_size &&
 +                s->next_picture_ptr &&
 +                skip_check(s, s->input_picture[0], s->next_picture_ptr)) {
 +                // FIXME check that te gop check above is +-1 correct
 +                av_frame_unref(s->input_picture[0]->f);
 +
 +                ff_vbv_update(s, 0);
 +
 +                goto no_output_pic;
 +            }
 +        }
 +
          if (/*s->picture_in_gop_number >= s->gop_size ||*/
              s->next_picture_ptr == NULL || s->intra_only) {
              s->reordered_input_picture[0] = s->input_picture[0];
          } else {
              int b_frames;
  
 -            if (s->avctx->frame_skip_threshold || s->avctx->frame_skip_factor) {
 -                if (s->picture_in_gop_number < s->gop_size &&
 -                    skip_check(s, s->input_picture[0], s->next_picture_ptr)) {
 -                    // FIXME check that te gop check above is +-1 correct
 -                    av_frame_unref(s->input_picture[0]->f);
 -
 -                    emms_c();
 -                    ff_vbv_update(s, 0);
 -
 -                    goto no_output_pic;
 -                }
 -            }
 -
              if (s->flags & CODEC_FLAG_PASS2) {
                  for (i = 0; i < s->max_b_frames + 1; i++) {
                      int pict_num = s->input_picture[0]->f->display_picture_number + i;
@@@ -1483,21 -1346,23 +1482,21 @@@ no_output_pic
  
  static void frame_end(MpegEncContext *s)
  {
 -    int i;
 -
      if (s->unrestricted_mv &&
          s->current_picture.reference &&
          !s->intra_only) {
          const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(s->avctx->pix_fmt);
          int hshift = desc->log2_chroma_w;
          int vshift = desc->log2_chroma_h;
 -        s->dsp.draw_edges(s->current_picture.f->data[0], s->linesize,
 +        s->dsp.draw_edges(s->current_picture.f->data[0], s->current_picture.f->linesize[0],
                            s->h_edge_pos, s->v_edge_pos,
                            EDGE_WIDTH, EDGE_WIDTH,
                            EDGE_TOP | EDGE_BOTTOM);
 -        s->dsp.draw_edges(s->current_picture.f->data[1], s->uvlinesize,
 +        s->dsp.draw_edges(s->current_picture.f->data[1], s->current_picture.f->linesize[1],
                            s->h_edge_pos >> hshift, s->v_edge_pos >> vshift,
                            EDGE_WIDTH >> hshift, EDGE_WIDTH >> vshift,
                            EDGE_TOP | EDGE_BOTTOM);
 -        s->dsp.draw_edges(s->current_picture.f->data[2], s->uvlinesize,
 +        s->dsp.draw_edges(s->current_picture.f->data[2], s->current_picture.f->linesize[2],
                            s->h_edge_pos >> hshift, s->v_edge_pos >> vshift,
                            EDGE_WIDTH >> hshift, EDGE_WIDTH >> vshift,
                            EDGE_TOP | EDGE_BOTTOM);
      if (s->pict_type!= AV_PICTURE_TYPE_B)
          s->last_non_b_pict_type = s->pict_type;
  
 -    if (s->encoding) {
 -        /* release non-reference frames */
 -        for (i = 0; i < MAX_PICTURE_COUNT; i++) {
 -            if (!s->picture[i].reference)
 -                ff_mpeg_unref_picture(s, &s->picture[i]);
 -        }
 -    }
 -
      s->avctx->coded_frame = s->current_picture_ptr->f;
  
  }
@@@ -1600,7 -1473,7 +1599,7 @@@ static int frame_start(MpegEncContext *
      }
  
      if (s->dct_error_sum) {
 -        assert(s->avctx->noise_reduction && s->encoding);
 +        av_assert2(s->avctx->noise_reduction && s->encoding);
          update_noise_reduction(s);
      }
  
@@@ -1625,7 -1498,8 +1624,7 @@@ int ff_MPV_encode_picture(AVCodecContex
  
      /* output? */
      if (s->new_picture.f->data[0]) {
 -        if (!pkt->data &&
 -            (ret = ff_alloc_packet(pkt, s->mb_width*s->mb_height*MAX_MB_BYTES)) < 0)
 +        if ((ret = ff_alloc_packet2(avctx, pkt, s->mb_width*s->mb_height*(MAX_MB_BYTES+100)+10000)) < 0)
              return ret;
          if (s->mb_info) {
              s->mb_info_ptr = av_packet_new_side_data(pkt,
@@@ -1703,7 -1577,7 +1702,7 @@@ vbv_retry
                  goto vbv_retry;
              }
  
 -            assert(s->avctx->rc_max_rate);
 +            av_assert0(s->avctx->rc_max_rate);
          }
  
          if (s->flags & CODEC_FLAG_PASS1)
          s->frame_bits  = put_bits_count(&s->pb);
  
          stuffing_count = ff_vbv_update(s, s->frame_bits);
 +        s->stuffing_bits = 8*stuffing_count;
          if (stuffing_count) {
              if (s->pb.buf_end - s->pb.buf - (put_bits_count(&s->pb) >> 3) <
                      stuffing_count + 50) {
  
              vbv_delay = FFMAX(vbv_delay, min_delay);
  
 -            assert(vbv_delay < 0xFFFF);
 +            av_assert0(vbv_delay < 0xFFFF);
  
              s->vbv_delay_ptr[0] &= 0xF8;
              s->vbv_delay_ptr[0] |= vbv_delay >> 13;
      } else {
          s->frame_bits = 0;
      }
 -    assert((s->frame_bits & 7) == 0);
 +
 +    /* release non-reference frames */
 +    for (i = 0; i < MAX_PICTURE_COUNT; i++) {
 +        if (!s->picture[i].reference)
 +            ff_mpeg_unref_picture(s, &s->picture[i]);
 +    }
 +
 +    av_assert1((s->frame_bits & 7) == 0);
  
      pkt->size = s->frame_bits / 8;
      *got_packet = !!pkt->size;
@@@ -1936,17 -1802,15 +1935,17 @@@ static void get_visual_weight(int16_t *
  static av_always_inline void encode_mb_internal(MpegEncContext *s,
                                                  int motion_x, int motion_y,
                                                  int mb_block_height,
 +                                                int mb_block_width,
                                                  int mb_block_count)
  {
 -    int16_t weight[8][64];
 -    int16_t orig[8][64];
 +    int16_t weight[12][64];
 +    int16_t orig[12][64];
      const int mb_x = s->mb_x;
      const int mb_y = s->mb_y;
      int i;
 -    int skip_dct[8];
 +    int skip_dct[12];
      int dct_offset = s->linesize * 8; // default for progressive frames
 +    int uv_dct_offset = s->uvlinesize * 8;
      uint8_t *ptr_y, *ptr_cb, *ptr_cr;
      ptrdiff_t wrap_y, wrap_c;
  
      ptr_y  = s->new_picture.f->data[0] +
               (mb_y * 16 * wrap_y)              + mb_x * 16;
      ptr_cb = s->new_picture.f->data[1] +
 -             (mb_y * mb_block_height * wrap_c) + mb_x * 8;
 +             (mb_y * mb_block_height * wrap_c) + mb_x * mb_block_width;
      ptr_cr = s->new_picture.f->data[2] +
 -             (mb_y * mb_block_height * wrap_c) + mb_x * 8;
 +             (mb_y * mb_block_height * wrap_c) + mb_x * mb_block_width;
  
 -    if (mb_x * 16 + 16 > s->width || mb_y * 16 + 16 > s->height) {
 +    if((mb_x * 16 + 16 > s->width || mb_y * 16 + 16 > s->height) && s->codec_id != AV_CODEC_ID_AMV){
          uint8_t *ebuf = s->edge_emu_buffer + 32;
 +        int cw = (s->width  + s->chroma_x_shift) >> s->chroma_x_shift;
 +        int ch = (s->height + s->chroma_y_shift) >> s->chroma_y_shift;
          s->vdsp.emulated_edge_mc(ebuf, ptr_y,
                                   wrap_y, wrap_y,
                                   16, 16, mb_x * 16, mb_y * 16,
          ptr_y = ebuf;
          s->vdsp.emulated_edge_mc(ebuf + 18 * wrap_y, ptr_cb,
                                   wrap_c, wrap_c,
 -                                 8, mb_block_height, mb_x * 8, mb_y * 8,
 -                                 s->width >> 1, s->height >> 1);
 +                                 mb_block_width, mb_block_height,
 +                                 mb_x * mb_block_width, mb_y * mb_block_height,
 +                                 cw, ch);
          ptr_cb = ebuf + 18 * wrap_y;
 -        s->vdsp.emulated_edge_mc(ebuf + 18 * wrap_y + 8, ptr_cr,
 +        s->vdsp.emulated_edge_mc(ebuf + 18 * wrap_y + 16, ptr_cr,
                                   wrap_c, wrap_c,
 -                                 8, mb_block_height, mb_x * 8, mb_y * 8,
 -                                 s->width >> 1, s->height >> 1);
 -        ptr_cr = ebuf + 18 * wrap_y + 8;
 +                                 mb_block_width, mb_block_height,
 +                                 mb_x * mb_block_width, mb_y * mb_block_height,
 +                                 cw, ch);
 +        ptr_cr = ebuf + 18 * wrap_y + 16;
      }
  
      if (s->mb_intra) {
                      s->interlaced_dct = 1;
  
                      dct_offset = wrap_y;
 +                    uv_dct_offset = wrap_c;
                      wrap_y <<= 1;
 -                    if (s->chroma_format == CHROMA_422)
 +                    if (s->chroma_format == CHROMA_422 ||
 +                        s->chroma_format == CHROMA_444)
                          wrap_c <<= 1;
                  }
              }
          } else {
              s->dsp.get_pixels(s->block[4], ptr_cb, wrap_c);
              s->dsp.get_pixels(s->block[5], ptr_cr, wrap_c);
 -            if (!s->chroma_y_shift) { /* 422 */
 -                s->dsp.get_pixels(s->block[6],
 -                                  ptr_cb + (dct_offset >> 1), wrap_c);
 -                s->dsp.get_pixels(s->block[7],
 -                                  ptr_cr + (dct_offset >> 1), wrap_c);
 +            if (!s->chroma_y_shift && s->chroma_x_shift) { /* 422 */
 +                s->dsp.get_pixels(s->block[6], ptr_cb + uv_dct_offset, wrap_c);
 +                s->dsp.get_pixels(s->block[7], ptr_cr + uv_dct_offset, wrap_c);
 +            } else if (!s->chroma_y_shift && !s->chroma_x_shift) { /* 444 */
 +                s->dsp.get_pixels(s->block[6], ptr_cb + 8, wrap_c);
 +                s->dsp.get_pixels(s->block[7], ptr_cr + 8, wrap_c);
 +                s->dsp.get_pixels(s->block[8], ptr_cb + uv_dct_offset, wrap_c);
 +                s->dsp.get_pixels(s->block[9], ptr_cr + uv_dct_offset, wrap_c);
 +                s->dsp.get_pixels(s->block[10], ptr_cb + uv_dct_offset + 8, wrap_c);
 +                s->dsp.get_pixels(s->block[11], ptr_cr + uv_dct_offset + 8, wrap_c);
              }
          }
      } else {
                      s->interlaced_dct = 1;
  
                      dct_offset = wrap_y;
 +                    uv_dct_offset = wrap_c;
                      wrap_y <<= 1;
                      if (s->chroma_format == CHROMA_422)
                          wrap_c <<= 1;
              s->dsp.diff_pixels(s->block[4], ptr_cb, dest_cb, wrap_c);
              s->dsp.diff_pixels(s->block[5], ptr_cr, dest_cr, wrap_c);
              if (!s->chroma_y_shift) { /* 422 */
 -                s->dsp.diff_pixels(s->block[6], ptr_cb + (dct_offset >> 1),
 -                                   dest_cb + (dct_offset >> 1), wrap_c);
 -                s->dsp.diff_pixels(s->block[7], ptr_cr + (dct_offset >> 1),
 -                                   dest_cr + (dct_offset >> 1), wrap_c);
 +                s->dsp.diff_pixels(s->block[6], ptr_cb + uv_dct_offset,
 +                                   dest_cb + uv_dct_offset, wrap_c);
 +                s->dsp.diff_pixels(s->block[7], ptr_cr + uv_dct_offset,
 +                                   dest_cr + uv_dct_offset, wrap_c);
              }
          }
          /* pre quantization */
                                wrap_c, 8) < 20 * s->qscale)
                  skip_dct[5] = 1;
              if (!s->chroma_y_shift) { /* 422 */
 -                if (s->dsp.sad[1](NULL, ptr_cb + (dct_offset >> 1),
 -                                  dest_cb + (dct_offset >> 1),
 +                if (s->dsp.sad[1](NULL, ptr_cb + uv_dct_offset,
 +                                  dest_cb + uv_dct_offset,
                                    wrap_c, 8) < 20 * s->qscale)
                      skip_dct[6] = 1;
 -                if (s->dsp.sad[1](NULL, ptr_cr + (dct_offset >> 1),
 -                                  dest_cr + (dct_offset >> 1),
 +                if (s->dsp.sad[1](NULL, ptr_cr + uv_dct_offset,
 +                                  dest_cr + uv_dct_offset,
                                    wrap_c, 8) < 20 * s->qscale)
                      skip_dct[7] = 1;
              }
              get_visual_weight(weight[5], ptr_cr                , wrap_c);
          if (!s->chroma_y_shift) { /* 422 */
              if (!skip_dct[6])
 -                get_visual_weight(weight[6], ptr_cb + (dct_offset >> 1),
 +                get_visual_weight(weight[6], ptr_cb + uv_dct_offset,
                                    wrap_c);
              if (!skip_dct[7])
 -                get_visual_weight(weight[7], ptr_cr + (dct_offset >> 1),
 +                get_visual_weight(weight[7], ptr_cr + uv_dct_offset,
                                    wrap_c);
          }
          memcpy(orig[0], s->block[0], sizeof(int16_t) * 64 * mb_block_count);
      }
  
      /* DCT & quantize */
 -    assert(s->out_format != FMT_MJPEG || s->qscale == 8);
 +    av_assert2(s->out_format != FMT_MJPEG || s->qscale == 8);
      {
          for (i = 0; i < mb_block_count; i++) {
              if (!skip_dct[i]) {
          s->block_last_index[5] = 0;
          s->block[4][0] =
          s->block[5][0] = (1024 + s->c_dc_scale / 2) / s->c_dc_scale;
 +        if (!s->chroma_y_shift) { /* 422 / 444 */
 +            for (i=6; i<12; i++) {
 +                s->block_last_index[i] = 0;
 +                s->block[i][0] = s->block[4][0];
 +            }
 +        }
      }
  
      // non c quantize code returns incorrect block_last_index FIXME
              ff_h263_encode_mb(s, s->block, motion_x, motion_y);
          break;
      case AV_CODEC_ID_MJPEG:
 +    case AV_CODEC_ID_AMV:
          if (CONFIG_MJPEG_ENCODER)
              ff_mjpeg_encode_mb(s, s->block);
          break;
      default:
 -        assert(0);
 +        av_assert1(0);
      }
  }
  
  static av_always_inline void encode_mb(MpegEncContext *s, int motion_x, int motion_y)
  {
 -    if (s->chroma_format == CHROMA_420) encode_mb_internal(s, motion_x, motion_y,  8, 6);
 -    else                                encode_mb_internal(s, motion_x, motion_y, 16, 8);
 +    if (s->chroma_format == CHROMA_420) encode_mb_internal(s, motion_x, motion_y,  8, 8, 6);
 +    else if (s->chroma_format == CHROMA_422) encode_mb_internal(s, motion_x, motion_y, 16, 8, 8);
 +    else encode_mb_internal(s, motion_x, motion_y, 16, 16, 12);
  }
  
  static inline void copy_context_before_encode(MpegEncContext *d, MpegEncContext *s, int type){
@@@ -2417,7 -2261,7 +2416,7 @@@ static inline void encode_mb_hq(MpegEnc
          s->dest[0] = s->rd_scratchpad;
          s->dest[1] = s->rd_scratchpad + 16*s->linesize;
          s->dest[2] = s->rd_scratchpad + 16*s->linesize + 8;
 -        assert(s->linesize >= 32); //FIXME
 +        av_assert0(s->linesize >= 32); //FIXME
      }
  
      encode_mb(s, motion_x, motion_y);
@@@ -2463,7 -2307,7 +2462,7 @@@ static int sse(MpegEncContext *s, uint8
          }
      }
  
 -    assert(acc>=0);
 +    av_assert2(acc>=0);
  
      return acc;
  }
@@@ -2513,8 -2357,6 +2512,8 @@@ static int pre_estimate_motion_thread(A
  static int estimate_motion_thread(AVCodecContext *c, void *arg){
      MpegEncContext *s= *(void**)arg;
  
 +    ff_check_alignment();
 +
      s->me.dia_size= s->avctx->dia_size;
      s->first_slice_line=1;
      for(s->mb_y= s->start_mb_y; s->mb_y < s->end_mb_y; s->mb_y++) {
@@@ -2541,8 -2383,6 +2540,8 @@@ static int mb_var_thread(AVCodecContex
      MpegEncContext *s= *(void**)arg;
      int mb_x, mb_y;
  
 +    ff_check_alignment();
 +
      for(mb_y=s->start_mb_y; mb_y < s->end_mb_y; mb_y++) {
          for(mb_x=0; mb_x < s->mb_width; mb_x++) {
              int xx = mb_x * 16;
@@@ -2569,7 -2409,7 +2568,7 @@@ static void write_slice_end(MpegEncCont
  
          ff_mpeg4_stuffing(&s->pb);
      }else if(CONFIG_MJPEG_ENCODER && s->out_format == FMT_MJPEG){
 -        ff_mjpeg_encode_stuffing(&s->pb);
 +        ff_mjpeg_encode_stuffing(s);
      }
  
      avpriv_align_put_bits(&s->pb);
@@@ -2633,8 -2473,6 +2632,8 @@@ static int encode_thread(AVCodecContex
      uint8_t bit_buf_tex[2][MAX_MB_BYTES];
      PutBitContext pb[2], pb2[2], tex_pb[2];
  
 +    ff_check_alignment();
 +
      for(i=0; i<2; i++){
          init_put_bits(&pb    [i], bit_buf    [i], MAX_MB_BYTES);
          init_put_bits(&pb2   [i], bit_buf2   [i], MAX_MB_BYTES);
  
          s->current_picture.f->error[i] = 0;
      }
 +    if(s->codec_id==AV_CODEC_ID_AMV){
 +        s->last_dc[0] = 128*8/13;
 +        s->last_dc[1] = 128*8/14;
 +        s->last_dc[2] = 128*8/14;
 +    }
      s->mb_skip_run = 0;
      memset(s->last_mv, 0, sizeof(s->last_mv));
  
              if(s->data_partitioning){
                  if(   s->pb2   .buf_end - s->pb2   .buf - (put_bits_count(&s->    pb2)>>3) < MAX_MB_BYTES
                     || s->tex_pb.buf_end - s->tex_pb.buf - (put_bits_count(&s->tex_pb )>>3) < MAX_MB_BYTES){
 -                    av_log(s->avctx, AV_LOG_ERROR, "encoded frame too large\n");
 +                    av_log(s->avctx, AV_LOG_ERROR, "encoded partitioned frame too large\n");
                      return -1;
                  }
              }
                  case AV_CODEC_ID_MPEG1VIDEO:
                      if(s->mb_skip_run) is_gob_start=0;
                      break;
 +                case AV_CODEC_ID_MJPEG:
 +                    if(s->mb_x==0 && s->mb_y!=0) is_gob_start=1;
 +                    break;
                  }
  
                  if(is_gob_start){
                          }
                      }
  
 -                    assert((put_bits_count(&s->pb)&7) == 0);
 +                    av_assert2((put_bits_count(&s->pb)&7) == 0);
                      current_packet_size= put_bits_ptr(&s->pb) - s->ptr_lastgob;
  
                      if (s->error_rate && s->resync_mb_x + s->resync_mb_y > 0) {
                          int16_t ac[6][16];
                          const int mvdir= (best_s.mv_dir&MV_DIR_BACKWARD) ? 1 : 0;
                          static const int dquant_tab[4]={-1,1,-2,2};
 +                        int storecoefs = s->mb_intra && s->dc_val[0];
  
 -                        assert(backup_s.dquant == 0);
 +                        av_assert2(backup_s.dquant == 0);
  
                          //FIXME intra
                          s->mv_dir= best_s.mv_dir;
                              if(qp < s->avctx->qmin || qp > s->avctx->qmax)
                                  continue;
                              backup_s.dquant= dquant;
 -                            if(s->mb_intra && s->dc_val[0]){
 +                            if(storecoefs){
                                  for(i=0; i<6; i++){
                                      dc[i]= s->dc_val[0][ s->block_index[i] ];
                                      memcpy(ac[i], s->ac_val[0][s->block_index[i]], sizeof(int16_t)*16);
                              encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_INTER /* wrong but unused */, pb, pb2, tex_pb,
                                           &dmin, &next_block, s->mv[mvdir][0][0], s->mv[mvdir][0][1]);
                              if(best_s.qscale != qp){
 -                                if(s->mb_intra && s->dc_val[0]){
 +                                if(storecoefs){
                                      for(i=0; i<6; i++){
                                          s->dc_val[0][ s->block_index[i] ]= dc[i];
                                          memcpy(s->ac_val[0][s->block_index[i]], ac[i], sizeof(int16_t)*16);
@@@ -3337,7 -3166,7 +3336,7 @@@ static int estimate_qp(MpegEncContext *
  
  /* must be called before writing the header */
  static void set_frame_distances(MpegEncContext * s){
 -    assert(s->current_picture_ptr->f->pts != AV_NOPTS_VALUE);
 +    av_assert1(s->current_picture_ptr->f->pts != AV_NOPTS_VALUE);
      s->time = s->current_picture_ptr->f->pts * s->avctx->time_base.num;
  
      if(s->pict_type==AV_PICTURE_TYPE_B){
@@@ -3393,13 -3222,6 +3392,13 @@@ static int encode_picture(MpegEncContex
          update_qscale(s);
      }
  
 +    if(s->codec_id != AV_CODEC_ID_AMV && s->codec_id != AV_CODEC_ID_MJPEG){
 +        if(s->q_chroma_intra_matrix   != s->q_intra_matrix  ) av_freep(&s->q_chroma_intra_matrix);
 +        if(s->q_chroma_intra_matrix16 != s->q_intra_matrix16) av_freep(&s->q_chroma_intra_matrix16);
 +        s->q_chroma_intra_matrix   = s->q_intra_matrix;
 +        s->q_chroma_intra_matrix16 = s->q_intra_matrix16;
 +    }
 +
      s->mb_intra=0; //for the rate distortion & bit compare functions
      for(i=1; i<context_count; i++){
          ret = ff_update_duplicate_context(s->thread_context[i], s);
          s->pict_type= AV_PICTURE_TYPE_I;
          for(i=0; i<s->mb_stride*s->mb_height; i++)
              s->mb_type[i]= CANDIDATE_MB_TYPE_INTRA;
 -        av_dlog(s, "Scene change detected, encoding as I Frame %d %d\n",
 +        if(s->msmpeg4_version >= 3)
 +            s->no_rounding=1;
 +        av_dlog(s, "Scene change detected, encoding as I Frame %"PRId64" %"PRId64"\n",
                  s->current_picture.mb_var_sum, s->current_picture.mc_mb_var_sum);
      }
  
          s->qscale= 3; //reduce clipping problems
  
      if (s->out_format == FMT_MJPEG) {
 +        const uint16_t *  luma_matrix = ff_mpeg1_default_intra_matrix;
 +        const uint16_t *chroma_matrix = ff_mpeg1_default_intra_matrix;
 +
 +        if (s->avctx->intra_matrix) {
 +            chroma_matrix =
 +            luma_matrix = s->avctx->intra_matrix;
 +        }
 +        if (s->avctx->chroma_intra_matrix)
 +            chroma_matrix = s->avctx->chroma_intra_matrix;
 +
          /* for mjpeg, we do include qscale in the matrix */
          for(i=1;i<64;i++){
              int j= s->dsp.idct_permutation[i];
  
 -            s->intra_matrix[j] = av_clip_uint8((ff_mpeg1_default_intra_matrix[i] * s->qscale) >> 3);
 +            s->chroma_intra_matrix[j] = av_clip_uint8((chroma_matrix[i] * s->qscale) >> 3);
 +            s->       intra_matrix[j] = av_clip_uint8((  luma_matrix[i] * s->qscale) >> 3);
          }
          s->y_dc_scale_table=
          s->c_dc_scale_table= ff_mpeg2_dc_scale_table[s->intra_dc_precision];
 +        s->chroma_intra_matrix[0] =
          s->intra_matrix[0] = ff_mpeg2_dc_scale_table[s->intra_dc_precision][8];
          ff_convert_matrix(&s->dsp, s->q_intra_matrix, s->q_intra_matrix16,
                         s->intra_matrix, s->intra_quant_bias, 8, 8, 1);
 +        ff_convert_matrix(&s->dsp, s->q_chroma_intra_matrix, s->q_chroma_intra_matrix16,
 +                       s->chroma_intra_matrix, s->intra_quant_bias, 8, 8, 1);
 +        s->qscale= 8;
 +    }
 +    if(s->codec_id == AV_CODEC_ID_AMV){
 +        static const uint8_t y[32]={13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13};
 +        static const uint8_t c[32]={14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14};
 +        for(i=1;i<64;i++){
 +            int j= s->dsp.idct_permutation[ff_zigzag_direct[i]];
 +
 +            s->intra_matrix[j] = sp5x_quant_table[5*2+0][i];
 +            s->chroma_intra_matrix[j] = sp5x_quant_table[5*2+1][i];
 +        }
 +        s->y_dc_scale_table= y;
 +        s->c_dc_scale_table= c;
 +        s->intra_matrix[0] = 13;
 +        s->chroma_intra_matrix[0] = 14;
 +        ff_convert_matrix(&s->dsp, s->q_intra_matrix, s->q_intra_matrix16,
 +                       s->intra_matrix, s->intra_quant_bias, 8, 8, 1);
 +        ff_convert_matrix(&s->dsp, s->q_chroma_intra_matrix, s->q_chroma_intra_matrix16,
 +                       s->chroma_intra_matrix, s->intra_quant_bias, 8, 8, 1);
          s->qscale= 8;
      }
  
      if (s->current_picture.f->key_frame)
          s->picture_in_gop_number=0;
  
 +    s->mb_x = s->mb_y = 0;
      s->last_bits= put_bits_count(&s->pb);
      switch(s->out_format) {
      case FMT_MJPEG:
          if (CONFIG_MJPEG_ENCODER)
              ff_mjpeg_encode_picture_header(s->avctx, &s->pb, &s->intra_scantable,
 -                                           s->intra_matrix);
 +                                           s->intra_matrix, s->chroma_intra_matrix);
          break;
      case FMT_H261:
          if (CONFIG_H261_ENCODER)
              ff_mpeg1_encode_picture_header(s, picture_number);
          break;
      default:
 -        assert(0);
 +        av_assert0(0);
      }
      bits= put_bits_count(&s->pb);
      s->header_bits= bits - s->last_bits;
@@@ -3689,7 -3475,7 +3688,7 @@@ static int dct_quantize_trellis_c(MpegE
          block[0] = (block[0] + (q >> 1)) / q;
          start_i = 1;
          last_non_zero = 0;
 -        qmat = s->q_intra_matrix[qscale];
 +        qmat = n < 4 ? s->q_intra_matrix[qscale] : s->q_chroma_intra_matrix[qscale];
          if(s->mpeg_quant || s->out_format == FMT_MPEG1)
              bias= 1<<(QMAT_SHIFT-1);
          length     = s->intra_ac_vlc_length;
  //                coeff[2][k]= -level+2;
              }
              coeff_count[i]= FFMIN(level, 2);
 -            assert(coeff_count[i]);
 +            av_assert2(coeff_count[i]);
              max |=level;
          }else{
              coeff[0][i]= (level>>31)|1;
              const int alevel= FFABS(level);
              int unquant_coeff;
  
 -            assert(level);
 +            av_assert2(level);
  
 -            if(s->out_format == FMT_H263){
 +            if(s->out_format == FMT_H263 || s->out_format == FMT_H261){
                  unquant_coeff= alevel*qmul + qadd;
              }else{ //MPEG1
                  j= s->dsp.idct_permutation[ scantable[i] ]; //FIXME optimize
                      }
                  }
  
 -                if(s->out_format == FMT_H263){
 +                if(s->out_format == FMT_H263 || s->out_format == FMT_H261){
                      for(j=survivor_count-1; j>=0; j--){
                          int run= i - survivor[j];
                          int score= distortion + last_length[UNI_AC_ENC_INDEX(run, level)]*lambda;
                      }
                  }
  
 -                if(s->out_format == FMT_H263){
 +                if(s->out_format == FMT_H263 || s->out_format == FMT_H261){
                    for(j=survivor_count-1; j>=0; j--){
                          int run= i - survivor[j];
                          int score= distortion + score_tab[i-run];
          survivor[ survivor_count++ ]= i+1;
      }
  
 -    if(s->out_format != FMT_H263){
 +    if(s->out_format != FMT_H263 && s->out_format != FMT_H261){
          last_score= 256*256*256*120;
          for(i= survivor[0]; i<=last_non_zero + 1; i++){
              int score= score_tab[i];
              int alevel= FFABS(level);
              int unquant_coeff, score, distortion;
  
 -            if(s->out_format == FMT_H263){
 +            if(s->out_format == FMT_H263 || s->out_format == FMT_H261){
                      unquant_coeff= (alevel*qmul + qadd)>>3;
              }else{ //MPEG1
                      unquant_coeff = (((  alevel  << 1) + 1) * qscale * ((int) s->inter_matrix[0])) >> 4;
      }
  
      i= last_i;
 -    assert(last_level);
 +    av_assert2(last_level);
  
      block[ perm_scantable[last_non_zero] ]= last_level;
      i -= last_run + 1;
@@@ -4034,8 -3820,8 +4033,8 @@@ STOP_TIMER("memset rem[]")
          weight[i] = w;
  //        w=weight[i] = (63*qns + (w/2)) / w;
  
 -        assert(w>0);
 -        assert(w<(1<<6));
 +        av_assert2(w>0);
 +        av_assert2(w<(1<<6));
          sum += w*w;
      }
      lambda= sum*(uint64_t)s->lambda2 >> (FF_LAMBDA_SHIFT - 6 + 6 + 6 + 6);
@@@ -4101,7 -3887,7 +4100,7 @@@ STOP_TIMER("dct")
              const int level= block[0];
              int change, old_coeff;
  
 -            assert(s->mb_intra);
 +            av_assert2(s->mb_intra);
  
              old_coeff= q*level;
  
              }else{
                  old_coeff=0;
                  run2--;
 -                assert(run2>=0 || i >= last_non_zero );
 +                av_assert2(run2>=0 || i >= last_non_zero );
              }
  
              for(change=-1; change<=1; change+=2){
                                           - last_length[UNI_AC_ENC_INDEX(run, level+64)];
                          }
                      }else{
 -                        assert(FFABS(new_level)==1);
 +                        av_assert2(FFABS(new_level)==1);
  
                          if(analyze_gradient){
                              int g= d1[ scantable[i] ];
                      }
                  }else{
                      new_coeff=0;
 -                    assert(FFABS(level)==1);
 +                    av_assert2(FFABS(level)==1);
  
                      if(i < last_non_zero){
                          int next_i= i + run2 + 1;
                  score *= lambda;
  
                  unquant_change= new_coeff - old_coeff;
 -                assert((score < 100*lambda && score > -100*lambda) || lambda==0);
 +                av_assert2((score < 100*lambda && score > -100*lambda) || lambda==0);
  
                  score+= s->dsp.try_8x8basis(rem, weight, basis[j], unquant_change);
                  if(score<best_score){
@@@ -4265,7 -4051,7 +4264,7 @@@ STOP_TIMER("iterative step")
  
              if(best_coeff > last_non_zero){
                  last_non_zero= best_coeff;
 -                assert(block[j]);
 +                av_assert2(block[j]);
  #ifdef REFINE_STATS
  after_last++;
  #endif
@@@ -4293,7 -4079,7 +4292,7 @@@ if(block[j])
  #ifdef REFINE_STATS
  count++;
  if(256*256*256*64 % count == 0){
 -    printf("after_last:%d to_zero:%d from_zero:%d raise:%d lower:%d sign:%d xyp:%d/%d/%d\n", after_last, to_zero, from_zero, raise, lower, messed_sign, s->mb_x, s->mb_y, s->picture_number);
 +    av_log(s->avctx, AV_LOG_DEBUG, "after_last:%d to_zero:%d from_zero:%d raise:%d lower:%d sign:%d xyp:%d/%d/%d\n", after_last, to_zero, from_zero, raise, lower, messed_sign, s->mb_x, s->mb_y, s->picture_number);
  }
  #endif
              run=0;
@@@ -4356,7 -4142,7 +4355,7 @@@ int ff_dct_quantize_c(MpegEncContext *s
          block[0] = (block[0] + (q >> 1)) / q;
          start_i = 1;
          last_non_zero = 0;
 -        qmat = s->q_intra_matrix[qscale];
 +        qmat = n < 4 ? s->q_intra_matrix[qscale] : s->q_chroma_intra_matrix[qscale];
          bias= s->intra_quant_bias<<(QMAT_SHIFT - QUANT_BIAS_SHIFT);
      } else {
          start_i = 0;
@@@ -1,21 -1,19 +1,21 @@@
  /*
 + * Copyright (c) 2001 Fabrice Bellard
 + * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
   *
 - * This file is part of Libav.
 + * This file is part of FFmpeg.
   *
 - * Libav is free software; you can redistribute it and/or
 + * FFmpeg is free software; you can redistribute it and/or
   * modify it under the terms of the GNU Lesser General Public
   * License as published by the Free Software Foundation; either
   * version 2.1 of the License, or (at your option) any later version.
   *
 - * Libav is distributed in the hope that it will be useful,
 + * FFmpeg is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   * Lesser General Public License for more details.
   *
   * You should have received a copy of the GNU Lesser General Public
 - * License along with Libav; if not, write to the Free Software
 + * License along with FFmpeg; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
   */
  
@@@ -29,6 -27,7 +29,6 @@@
  #include "libavutil/opt.h"
  #include "avcodec.h"
  #include "version.h"
 -#include "config.h"
  
  #define OFFSET(x) offsetof(AVCodecContext,x)
  #define DEFAULT 0 //should be NAN but it does not work as it is not a constant in glibc as required by ANSI/ISO C
  #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_INT, {.i64 = AV_CODEC_DEFAULT_BITRATE }, 0, INT_MAX, A|V|E},
 +{"ab", "set bitrate (in bits/s)", OFFSET(bit_rate), AV_OPT_TYPE_INT, {.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 = 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 = CODEC_FLAG_4MV }, INT_MIN, INT_MAX, V|E, "flags"},
  {"qpel", "use 1/4-pel motion compensation", 0, AV_OPT_TYPE_CONST, {.i64 = CODEC_FLAG_QPEL }, INT_MIN, INT_MAX, V|E, "flags"},
@@@ -56,7 -54,9 +56,9 @@@
  {"qscale", "use fixed qscale", 0, AV_OPT_TYPE_CONST, {.i64 = CODEC_FLAG_QSCALE }, INT_MIN, INT_MAX, 0, "flags"},
  {"gmc", "use gmc", 0, AV_OPT_TYPE_CONST, {.i64 = CODEC_FLAG_GMC }, INT_MIN, INT_MAX, V|E, "flags"},
  {"mv0", "always try a mb with mv=<0,0>", 0, AV_OPT_TYPE_CONST, {.i64 = CODEC_FLAG_MV0 }, INT_MIN, INT_MAX, V|E, "flags"},
+ #if FF_API_INPUT_PRESERVED
  {"input_preserved", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = CODEC_FLAG_INPUT_PRESERVED }, INT_MIN, INT_MAX, 0, "flags"},
+ #endif
  {"pass1", "use internal 2-pass ratecontrol in first  pass mode", 0, AV_OPT_TYPE_CONST, {.i64 = CODEC_FLAG_PASS1 }, INT_MIN, INT_MAX, 0, "flags"},
  {"pass2", "use internal 2-pass ratecontrol in second pass mode", 0, AV_OPT_TYPE_CONST, {.i64 = CODEC_FLAG_PASS2 }, INT_MIN, INT_MAX, 0, "flags"},
  {"gray", "only decode/encode grayscale", 0, AV_OPT_TYPE_CONST, {.i64 = CODEC_FLAG_GRAY }, INT_MIN, INT_MAX, V|E|D, "flags"},
  {"output_corrupt", "Output even potentially corrupted frames", 0, AV_OPT_TYPE_CONST, {.i64 = CODEC_FLAG_OUTPUT_CORRUPT }, INT_MIN, INT_MAX, V|D, "flags"},
  {"fast", "allow non-spec-compliant speedup tricks", 0, AV_OPT_TYPE_CONST, {.i64 = CODEC_FLAG2_FAST }, INT_MIN, INT_MAX, V|E, "flags2"},
  {"noout", "skip bitstream encoding", 0, AV_OPT_TYPE_CONST, {.i64 = CODEC_FLAG2_NO_OUTPUT }, INT_MIN, INT_MAX, V|E, "flags2"},
 -{"ignorecrop", "ignore cropping information from sps", 1, AV_OPT_TYPE_CONST, {.i64 = CODEC_FLAG2_IGNORE_CROP }, INT_MIN, INT_MAX, V|D, "flags2"},
 +{"ignorecrop", "ignore cropping information from sps", 0, AV_OPT_TYPE_CONST, {.i64 = 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 = 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 = CODEC_FLAG2_CHUNKS }, INT_MIN, INT_MAX, V|D, "flags2"},
 +{"showall", "Show all frames before the first keyframe", 0, AV_OPT_TYPE_CONST, {.i64 = CODEC_FLAG2_SHOW_ALL }, INT_MIN, INT_MAX, V|D, "flags2"},
  {"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" },
@@@ -90,7 -88,6 +92,7 @@@
  {"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" },
  {"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},
  {"g", "set the group of picture (GOP) size", OFFSET(gop_size), AV_OPT_TYPE_INT, {.i64 = 12 }, INT_MIN, INT_MAX, V|E},
            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},
  {"rc_strategy", "ratecontrol method", OFFSET(rc_strategy), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E},
  {"b_strategy", "strategy to choose between I/P/B-frames", OFFSET(b_frame_strategy), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, V|E},
  {"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"},
  {"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"},
 +{"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"},
 +{"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 }, INT_MIN, INT_MAX},
  {"block_align", NULL, OFFSET(block_align), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX},
  {"mpeg_quant", "use MPEG quantizers instead of H.263", OFFSET(mpeg_quant), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E},
  {"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
 +{"thread_ops", "threading operations", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_THREADS }, INT_MIN, INT_MAX, V|A|D, "debug"},
  {"vismv", "visualize motion vectors (MVs)", OFFSET(debug_mv), AV_OPT_TYPE_INT, {.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"},
 -#endif
  {"cmp", "full-pel ME compare function", OFFSET(me_cmp), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E, "cmp_func"},
  {"subcmp", "sub-pel ME compare function", OFFSET(me_sub_cmp), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E, "cmp_func"},
  {"mbcmp", "macroblock compare function", OFFSET(mb_cmp), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 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"},
  {"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},
  #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"},
 +{"mbd", "macroblock decision algorithm (high quality mode)", OFFSET(mb_decision), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, 2, V|E, "mbd"},
  {"simple", "use mbcmp (default)", 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_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", NULL, 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"},
  {"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},
  {"dts_hd_ma", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PROFILE_DTS_HD_MA }, INT_MIN, INT_MAX, A|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},
  {"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},
  {"skip_exp", "frame skip exponent", OFFSET(frame_skip_exp), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E},
  {"mblmin", "minimum macroblock Lagrange factor (VBR)", OFFSET(mb_lmin), AV_OPT_TYPE_INT, {.i64 = FF_QP2LAMBDA * 2 }, 1, FF_LAMBDA_MAX, V|E},
  {"mblmax", "maximum macroblock Lagrange factor (VBR)", OFFSET(mb_lmax), AV_OPT_TYPE_INT, {.i64 = FF_QP2LAMBDA * 31 }, 1, FF_LAMBDA_MAX, V|E},
  {"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},
 -{"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"},
 +{"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},
  {"brd_scale", "downscale frames for dynamic B-frame decision", OFFSET(brd_scale), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, 10, V|E},
 -{"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},
  {"chromaoffset", "chroma QP offset from luma", OFFSET(chromaoffset), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E},
  {"trellis", "rate-distortion optimal quantization", OFFSET(trellis), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|A|E},
  {"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},
 +{"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", NULL, OFFSET(color_primaries), AV_OPT_TYPE_INT, {.i64 = AVCOL_PRI_UNSPECIFIED }, 1, AVCOL_PRI_NB-1, V|E|D},
  {"chroma_sample_location", NULL, OFFSET(chroma_sample_location), AV_OPT_TYPE_INT, {.i64 = AVCHROMA_LOC_UNSPECIFIED }, 0, AVCHROMA_LOC_NB-1, V|E|D},
  {"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"},
 +{"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, AV_SAMPLE_FMT_NB-1, 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"},
 +{"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"},
  {"refcounted_frames", NULL, OFFSET(refcounted_frames), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 1, A|V|D },
 +{"skip_alpha", "Skip processing alpha", OFFSET(skip_alpha), AV_OPT_TYPE_INT, {.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" },
  {NULL},
  };
  
diff --combined libavcodec/version.h
@@@ -1,19 -1,19 +1,19 @@@
  /*
   *
 - * 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
   */
  
@@@ -29,8 -29,8 +29,8 @@@
  #include "libavutil/version.h"
  
  #define LIBAVCODEC_VERSION_MAJOR 55
 -#define LIBAVCODEC_VERSION_MINOR 50
 -#define LIBAVCODEC_VERSION_MICRO  0
 +#define LIBAVCODEC_VERSION_MINOR  60
 +#define LIBAVCODEC_VERSION_MICRO 100
  
  #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
                                                 LIBAVCODEC_VERSION_MINOR, \
  #ifndef FF_API_REQUEST_CHANNELS
  #define FF_API_REQUEST_CHANNELS (LIBAVCODEC_VERSION_MAJOR < 56)
  #endif
 +#ifndef FF_API_OLD_DECODE_AUDIO
 +#define FF_API_OLD_DECODE_AUDIO (LIBAVCODEC_VERSION_MAJOR < 56)
 +#endif
 +#ifndef FF_API_OLD_ENCODE_AUDIO
 +#define FF_API_OLD_ENCODE_AUDIO (LIBAVCODEC_VERSION_MAJOR < 56)
 +#endif
 +#ifndef FF_API_OLD_ENCODE_VIDEO
 +#define FF_API_OLD_ENCODE_VIDEO (LIBAVCODEC_VERSION_MAJOR < 56)
 +#endif
 +#ifndef FF_API_CODEC_ID
 +#define FF_API_CODEC_ID          (LIBAVCODEC_VERSION_MAJOR < 56)
 +#endif
 +#ifndef FF_API_AUDIO_CONVERT
 +#define FF_API_AUDIO_CONVERT     (LIBAVCODEC_VERSION_MAJOR < 56)
 +#endif
 +#ifndef FF_API_AVCODEC_RESAMPLE
 +#define FF_API_AVCODEC_RESAMPLE  FF_API_AUDIO_CONVERT
 +#endif
  #ifndef FF_API_DEINTERLACE
  #define FF_API_DEINTERLACE       (LIBAVCODEC_VERSION_MAJOR < 56)
  #endif
  #ifndef FF_API_ARCH_SPARC
  #define FF_API_ARCH_SPARC        (LIBAVCODEC_VERSION_MAJOR < 56)
  #endif
+ #ifndef FF_API_INPUT_PRESERVED
+ #define FF_API_INPUT_PRESERVED   (LIBAVCODEC_VERSION_MAJOR < 57)
+ #endif
  
  #endif /* AVCODEC_VERSION_H */