| @@ -1,48 +1,31 @@ | |||
| Release Notes | |||
| ============= | |||
| * 11 "One Louder" | |||
| * 12 "Not Enough Trocadero" | |||
| 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. | |||
| @@ -54,22 +37,38 @@ have been deprecated and are scheduled for removal in the next release. | |||
| Significant API changes include: | |||
| [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] | |||
| + 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 | |||
| programmer-centric information. | |||