Release Notes
=============

* 12 "Not Enough Trocadero"

General notes
-------------

This release once again bumps the major versions of all the libraries, removing
some long-deprecated APIs. This means that it is neither API nor ABI-compatible
with the previous release. The users who still did not update their code are
advised to look at the next section of these release notes, the doc/APIchanges
file and the API migration guide on our wiki.  If those are not sufficient, do
not hesitate to contact us on IRC or through the user mailing list.

Among the main highlights of this release are several additions related to
hardware acceleration. There is a new API for managing hardware devices and
frame pools, which allows to add new features such as zero-copy
hardware-accelerated filtering with libavfilter and should reduce the
boilerplate code required for existing hardware-accelerated decoders. We have
added QuickSync decoding and encoding, NVENC encoding and CUDA image scaling,
VAAPI encoding and image scaling, OpenMAX encoding, MMAL decoding and Direct3D11
decoding.

Other significant additions not related to hardware acceleration include
decoders for Canopus HQ/HQA and HQX, Go2Meeting, AAC ELD, TDSC, Hap, DXV, SPV1,
and a new ASF demuxer written according to the specification. There were also
countless smaller changes and bug fixes.

See the Changelog file for a more extensive list of significant changes.

API changes
-----------

A number of additional APIs have been introduced and some existing functions
have been deprecated and are scheduled for removal in the next release.
Significant API changes include:

[libavcodec]
+  Added an object for storing codec parameters (AVCodecParameters) and its
   related API. It will now replace AVCodecContext everywhere except the actual
   encoders/decoders.
+- Added a new API for handling refcounted AVPackets, mirroring the AVFrame API.
   Deprecated certain old ill-defined AVPacket functions.
+- Added a new API for audio/video encoding and decoding, with decoupled input
   and output. This will e.g. allow a decoder to produce multiple output frames
   for a single input packet, which was not possible with the previous API. All
   users are strongly encouraged to switch to this new API as soon as possible,
   since certain decoders and encoders might start requiring the new API to be
   used.
+- Added a new API for bitstream filtering, which works with refcounted
   AVPackets and is more clearly defined and documented. The old bitstream
   filtering API is now deprecated.

[libavformat]
+  Added new IO callbacks to AVFormatContext, allowing the caller to provide
   custom IO for certain special muxers and demuxers.
+- Replaced AVStream.codec (AVCodecContext) with AVStream.codecpar
   (AVCodecParameters) as the means of signalling codec parameters between the
   muxers/demuxers and the caller.

[libavutil]
+  Added a new API (hwcontext.h) for handling hardware acceleration devices and
   hardware frame pools.

[libavfilter]
+  Added a new struct, AVBufferSrcParameters, for passing the stream parameters
   to the buffer source. It is now the recommended way of configuring the buffer
   source.
+  Added AVFilterContext.hw_device_ctx and AVFilterLink.hw_frames_ctx that allow
   hardware frames to be used in filter graphs.

Please see the file doc/APIchanges for details along with similar
programmer-centric information.
