| @@ -1,48 +1,31 @@ | |||||
| Release Notes | Release Notes | ||||
| ============= | ============= | ||||
| * 11 "One Louder" | |||||
| * 12 "Not Enough Trocadero" | |||||
| General notes | General notes | ||||
| ------------- | ------------- | ||||
| With this release we are trying to answer the numerous calls from our users for | |||||
| shorter development cycles. From now on we will aim for approximately two major | |||||
| releases per year. | |||||
| 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. | |||||
| Libav 11 is API-, but not ABI-compatible with the previous major release. This | |||||
| means that the code using our libraries needs to be rebuilt, but no source | |||||
| changes should be required. Note however, that a number of old APIs remain | |||||
| deprecated and will be dropped in the near future. All users are strongly | |||||
| encouraged to update their code as soon as possible. The doc/APIchanges file in | |||||
| the Libav source tree and the migration guide on the wiki should help with | |||||
| migration to the new APIs. 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. | |||||
| One specific API issue in libavformat deserves mentioning here. When using | |||||
| libavcodec for decoding or encoding and libavformat for demuxing or muxing, | |||||
| the standard practice was to use the stream codec context (AVStream.codec) for | |||||
| actual decoding or encoding. There are multiple problems with this pattern | |||||
| (the main one is that the decoder/demuxer or encoder/muxer are not necessarily | |||||
| synchronized and may overwrite each other's state), so it is now strongly | |||||
| discouraged and will likely be deprecated in the future. Users should instead | |||||
| allocate a separate decoding or encoding context and populate it from the | |||||
| demuxing codec context (or the reverse for encoding) with the | |||||
| avcodec_copy_context() function. | |||||
| The main highlights of this release include native Opus, VP7, OpenEXR, and On2 | |||||
| AVC decoders, HEVC encoding through libx265, new APIs for exporting ReplayGain | |||||
| and display transformation metadata and countless bug fixes. A large effort was | |||||
| also expended on internal cleanups which are not very visible to our users, | |||||
| but should make the codebase cleaner, safer and easier to maintain and extend. | |||||
| One point worth mentioning is refactoring the large monolithic framework for | |||||
| architecture-specific codec optimizations into small blocks, which reduces the | |||||
| size of configurations that selectively enable or disable certain codecs. | |||||
| The avserver streaming tool, which has not been maintained for many years and | |||||
| was mostly broken, was removed from the tree. It was decided that it is a | |||||
| significant maintenance burden and that we do our users no service by pretending | |||||
| to support it, while we in fact do not. | |||||
| 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. | See the Changelog file for a more extensive list of significant changes. | ||||
| @@ -54,22 +37,38 @@ have been deprecated and are scheduled for removal in the next release. | |||||
| Significant API changes include: | Significant API changes include: | ||||
| [libavcodec] | [libavcodec] | ||||
| + Added the avcodec_copy_context() function that must from now on be used for | |||||
| freeing codec contexts. | |||||
| +- Added a new VDA hardware acceleration API, since the old one was broken and | |||||
| not fixable in a compatible way. Deprecated the old VDA API. | |||||
| + 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] | [libavformat] | ||||
| + Added support for exporting stream-global (as opposed to per-packet) side | |||||
| data. This feature is now used by some demuxers to export ReplayGain or | |||||
| display transformation matrix (aka rotation) or stereoscopic 3D mode. | |||||
| + Added an API for live metadata updates through event flags. | |||||
| +- Changed the way to provide a hint about the desired timebase to muxers. | |||||
| Previously it was done by setting AVStream.codec.time_base. Now callers | |||||
| should set AVStream.time_base. | |||||
| + 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. | |||||
| [libavresample] | |||||
| + Added an API for working with AVFrames. | |||||
| [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 | Please see the file doc/APIchanges for details along with similar | ||||
| programmer-centric information. | programmer-centric information. | ||||