Merge commit '34c113335b53d83ed343de49741f0823aa1f8cc6'
authorMark Thompson <sw@jkqxz.net>
Tue, 16 Jan 2018 23:25:27 +0000 (23:25 +0000)
committerMark Thompson <sw@jkqxz.net>
Tue, 16 Jan 2018 23:25:27 +0000 (23:25 +0000)
* commit '34c113335b53d83ed343de49741f0823aa1f8cc6':
  Add support for H.264 and HEVC hardware encoding for AMD GPUs based on AMF SDK

Most of this was already present from 9ea6607d294526688ab1b1342cb36ee159683e88,
this just applies some minor fixups and adds the general documentation.

Merged-by: Mark Thompson <sw@jkqxz.net>
1  2 
doc/general.texi
libavcodec/amfenc.c
libavcodec/amfenc_h264.c
libavcodec/amfenc_hevc.c

diff --combined doc/general.texi
@@@ -1,5 -1,4 +1,5 @@@
  \input texinfo @c -*- texinfo -*-
 +@documentencoding UTF-8
  
  @settitle General Documentation
  @titlepage
  
  @chapter External libraries
  
 -Libav can be hooked up with a number of external libraries to add support
 +FFmpeg can be hooked up with a number of external libraries to add support
  for more formats. None of them are used by default, their use has to be
  explicitly requested by passing the appropriate flags to
  @command{./configure}.
  
 -@section OpenCORE and VisualOn libraries
 +@section OpenJPEG
 +
 +FFmpeg can use the OpenJPEG libraries for encoding/decoding J2K videos.  Go to
 +@url{http://www.openjpeg.org/} to get the libraries and follow the installation
 +instructions.  To enable using OpenJPEG in FFmpeg, pass @code{--enable-libopenjpeg} to
 +@file{./configure}.
 +
 +
 +@section OpenCORE, VisualOn, and Fraunhofer libraries
  
  Spun off Google Android sources, OpenCore, VisualOn and Fraunhofer
  libraries provide encoders for a number of audio codecs.
  @float NOTE
  OpenCORE and VisualOn libraries are under the Apache License 2.0
  (see @url{http://www.apache.org/licenses/LICENSE-2.0} for details), which is
 -incompatible with the LGPL version 2.1 and GPL version 2. You have to
 -upgrade Libav's license to LGPL version 3 (or if you have enabled
 -GPL components, GPL version 3) to use it.
 +incompatible to the LGPL version 2.1 and GPL version 2. You have to
 +upgrade FFmpeg's license to LGPL version 3 (or if you have enabled
 +GPL components, GPL version 3) by passing @code{--enable-version3} to configure in
 +order to use it.
 +
 +The Fraunhofer AAC library is licensed under a license incompatible to the GPL
 +and is not known to be compatible to the LGPL. Therefore, you have to pass
 +@code{--enable-nonfree} to configure to use it.
  @end float
  
  @subsection OpenCORE AMR
  
 -Libav can make use of the OpenCORE libraries for AMR-NB
 +FFmpeg can make use of the OpenCORE libraries for AMR-NB
  decoding/encoding and AMR-WB decoding.
  
  Go to @url{http://sourceforge.net/projects/opencore-amr/} and follow the
@@@ -53,9 -39,17 +53,9 @@@ instructions for installing the librari
  Then pass @code{--enable-libopencore-amrnb} and/or
  @code{--enable-libopencore-amrwb} to configure to enable them.
  
 -@subsection VisualOn AAC encoder library
 -
 -Libav can make use of the VisualOn AACenc library for AAC encoding.
 -
 -Go to @url{http://sourceforge.net/projects/opencore-amr/} and follow the
 -instructions for installing the library.
 -Then pass @code{--enable-libvo-aacenc} to configure to enable it.
 -
  @subsection VisualOn AMR-WB encoder library
  
 -Libav can make use of the VisualOn AMR-WBenc library for AMR-WB encoding.
 +FFmpeg can make use of the VisualOn AMR-WBenc library for AMR-WB encoding.
  
  Go to @url{http://sourceforge.net/projects/opencore-amr/} and follow the
  instructions for installing the library.
@@@ -63,7 -57,7 +63,7 @@@ Then pass @code{--enable-libvo-amrwbenc
  
  @subsection Fraunhofer AAC library
  
 -Libav can make use of the Fraunhofer AAC library for AAC encoding.
 +FFmpeg can make use of the Fraunhofer AAC library for AAC encoding.
  
  Go to @url{http://sourceforge.net/projects/opencore-amr/} and follow the
  instructions for installing the library.
@@@ -71,7 -65,7 +71,7 @@@ Then pass @code{--enable-libfdk-aac} t
  
  @section LAME
  
 -Libav can make use of the LAME library for MP3 encoding.
 +FFmpeg can make use of the LAME library for MP3 encoding.
  
  Go to @url{http://lame.sourceforge.net/} and follow the
  instructions for installing the library.
@@@ -79,7 -73,7 +79,7 @@@ Then pass @code{--enable-libmp3lame} t
  
  @section TwoLAME
  
 -Libav can make use of the TwoLAME library for MP2 encoding.
 +FFmpeg can make use of the TwoLAME library for MP2 encoding.
  
  Go to @url{http://www.twolame.org/} and follow the
  instructions for installing the library.
@@@ -87,7 -81,7 +87,7 @@@ Then pass @code{--enable-libtwolame} t
  
  @section libvpx
  
 -Libav can make use of the libvpx library for VP8 encoding.
 +FFmpeg can make use of the libvpx library for VP8/VP9 encoding.
  
  Go to @url{http://www.webmproject.org/} and follow the instructions for
  installing the library. Then pass @code{--enable-libvpx} to configure to
@@@ -95,7 -89,7 +95,7 @@@ enable it
  
  @section libwavpack
  
 -Libav can make use of the libwavpack library for WavPack encoding.
 +FFmpeg can make use of the libwavpack library for WavPack encoding.
  
  Go to @url{http://www.wavpack.com/} and follow the instructions for
  installing the library. Then pass @code{--enable-libwavpack} to configure to
@@@ -103,7 -97,7 +103,7 @@@ enable it
  
  @section libxavs
  
 -Libav can make use of the libxavs library for Xavs encoding.
 +FFmpeg can make use of the libxavs library for Xavs encoding.
  
  Go to @url{http://xavs.sf.net/} and follow the instructions for
  installing the library. Then pass @code{--enable-libxavs} to configure to
@@@ -111,7 -105,7 +111,7 @@@ enable it
  
  @section OpenH264
  
 -Libav can make use of the OpenH264 library for H.264 encoding and decoding.
 +FFmpeg can make use of the OpenH264 library for H.264 encoding and decoding.
  
  Go to @url{http://www.openh264.org/} and follow the instructions for
  installing the library. Then pass @code{--enable-libopenh264} to configure to
@@@ -126,7 -120,7 +126,7 @@@ testing and for taking advantage of Cis
  
  @section x264
  
 -Libav can make use of the x264 library for H.264 encoding.
 +FFmpeg can make use of the x264 library for H.264 encoding.
  
  Go to @url{http://www.videolan.org/developers/x264.html} and follow the
  instructions for installing the library. Then pass @code{--enable-libx264} to
@@@ -135,26 -129,26 +135,26 @@@ configure to enable it
  @float NOTE
  x264 is under the GNU Public License Version 2 or later
  (see @url{http://www.gnu.org/licenses/old-licenses/gpl-2.0.html} for
 -details), you must upgrade Libav's license to GPL in order to use it.
 +details), you must upgrade FFmpeg's license to GPL in order to use it.
  @end float
  
  @section x265
  
 -Libav can make use of the x265 library for HEVC encoding.
 +FFmpeg can make use of the x265 library for HEVC encoding.
  
  Go to @url{http://x265.org/developers.html} and follow the instructions
  for installing the library. Then pass @code{--enable-libx265} to configure
  to enable it.
  
 -@float note
 +@float NOTE
  x265 is under the GNU Public License Version 2 or later
  (see @url{http://www.gnu.org/licenses/old-licenses/gpl-2.0.html} for
 -details), you must upgrade Libav's license to GPL in order to use it.
 +details), you must upgrade FFmpeg's license to GPL in order to use it.
  @end float
  
  @section kvazaar
  
 -Libav can make use of the kvazaar library for HEVC encoding.
 +FFmpeg can make use of the kvazaar library for HEVC encoding.
  
  Go to @url{https://github.com/ultravideo/kvazaar} and follow the
  instructions for installing the library. Then pass
  
  iLBC is a narrowband speech codec that has been made freely available
  by Google as part of the WebRTC project. libilbc is a packaging friendly
 -copy of the iLBC codec. Libav can make use of the libilbc library for
 +copy of the iLBC codec. FFmpeg can make use of the libilbc library for
  iLBC encoding and decoding.
  
 -Go to @url{https://github.com/dekkers/libilbc} and follow the instructions for
 +Go to @url{https://github.com/TimothyGu/libilbc} and follow the instructions for
  installing the library. Then pass @code{--enable-libilbc} to configure to
  enable it.
  
 -@section libhdcd
 +@section libzvbi
  
 -Libav can make use of the libhdcd library for High Definition Compatible
 -Digital (HDCD) decoding via the @code{hdcd} filter.
 +libzvbi is a VBI decoding library which can be used by FFmpeg to decode DVB
 +teletext pages and DVB teletext subtitles.
  
 -Go to @url{https://github.com/bp0/libhdcd} and follow the instructions for
 -installing the library. Then pass @code{--enable-libhdcd} to configure to
 +Go to @url{http://sourceforge.net/projects/zapping/} and follow the instructions for
 +installing the library. Then pass @code{--enable-libzvbi} to configure to
  enable it.
  
  @section AviSynth
  
 -Libav can read AviSynth scripts as input. To enable support you need a
 -suitable @file{avisynth_c.h} header to compile against. The header as
 -provided by AviSynth+ is fully compatible. AviSynth 2.5 is not supported
 -by Libav. Once you have the appropriate header, pass
 -@code{--enable-avisynth} to configure to enable AviSynth support.
 +FFmpeg can read AviSynth scripts as input. To enable support, pass
 +@code{--enable-avisynth} to configure.  The correct headers are
 +included in compat/avisynth/, which allows the user to enable support
 +without needing to search for these headers themselves.
  
  For Windows, supported AviSynth variants are
  @url{http://avisynth.nl, AviSynth 2.6 RC1 or higher} for 32-bit builds and
  @url{http://avs-plus.net, AviSynth+ r1718 or higher} for 32-bit and 64-bit builds.
 -@url{https://github.com/AviSynth/AviSynthPlus, AviSynth+'s git repository}
 -provides a GNU-style Makefile which can install just the headers using
 -@code{make install PREFIX=/install/prefix}.
 +
 +For Linux and OS X, the supported AviSynth variant is
 +@url{https://github.com/avxsynth/avxsynth, AvxSynth}.
  
  @float NOTE
  There is currently a regression in AviSynth+'s @code{capi.h} header as of
 -October 2016, which interferes with the ability for builds of Libav to use
 +October 2016, which interferes with the ability for builds of FFmpeg to use
  MSVC-built binaries of AviSynth. Until this is resolved, you can make sure
  a known good version is installed by checking out a version from before
  the regression occurred:
@@@ -208,7 -203,24 +208,7 @@@ make install PREFIX=/install/prefix
  @end float
  
  @float NOTE
 -When using AviSynth+'s installed headers, the user must also pass
 -the avisynth/ include directory to @code{--extra-cflags}. For example,
 -if the PREFIX given to AviSynth+'s Makefile was /usr/i686-w64-mingw32,
 -then the correct command would be
 -@code{--extra-cflags="-I/usr/i686-w64-mingw32/include/avisynth"}.
 -@end float
 -
 -For Linux and OS X, the supported AviSynth variant is
 -@url{https://github.com/avxsynth/avxsynth, AvxSynth}.
 -@file{avxsynth_c.h} is installed as part of the normal
 -build routine, as illustrated on
 -@url{https://github.com/avxsynth/avxsynth/wiki/System-Setup, AvxSynth's wiki}.
 -(the instructions for compiling its prerequisites are outdated, as FFMS 2.18
 -or higher is now needed; the list of dependencies to be downloaded from the
 -repositories is still the same, though).
 -
 -@float NOTE
 -AviSynth and AvxSynth are loaded dynamically.  Distributors can build Libav
 +AviSynth and AvxSynth are loaded dynamically.  Distributors can build FFmpeg
  with @code{--enable-avisynth}, and the binaries will work regardless of the
  end user having AviSynth or AvxSynth installed - they'll only need to be
  installed to use AviSynth scripts (obviously).
  
  @section Intel QuickSync Video
  
 -Libav can use Intel QuickSync Video (QSV) for accelerated encoding and decoding
 -of multiple codecs. To use QSV, Libav must be linked against the @code{libmfx}
 +FFmpeg can use Intel QuickSync Video (QSV) for accelerated encoding and decoding
 +of multiple codecs. To use QSV, FFmpeg must be linked against the @code{libmfx}
  dispatcher, which loads the actual decoding libraries.
  
  The dispatcher is open source and can be downloaded from
 -@url{https://github.com/lu-zero/mfx_dispatch.git}. Libav needs to be configured
 +@url{https://github.com/lu-zero/mfx_dispatch.git}. FFmpeg needs to be configured
  with the @code{--enable-libmfx} option and @code{pkg-config} needs to be able to
  locate the dispatcher's @code{.pc} files.
  
 -Libav can use the AMD Advanced Media Framework library for accelerated H.264 and HEVC encoding on VCE enabled hardware under Windows.
+ @section AMD VCE
 -To enable support you must obtain the AMF framework header files from @url{https://github.com/GPUOpen-LibrariesAndSDKs/AMF.git}.
++FFmpeg can use the AMD Advanced Media Framework library for accelerated H.264
++and HEVC encoding on VCE enabled hardware under Windows.
 -Then Configure Libav with @code{--enable-amf}.
++To enable support you must obtain the AMF framework header files from
++@url{https://github.com/GPUOpen-LibrariesAndSDKs/AMF.git}.
+ Create an @code{AMF/} directory in the system include path.
+ Copy the contents of @code{AMF/amf/public/include/} into that directory.
++Then configure FFmpeg with @code{--enable-amf}.
++
  
 -@chapter Supported File Formats and Codecs
 +@chapter Supported File Formats, Codecs or Features
  
  You can use the @code{-formats} and @code{-codecs} options to have an exhaustive list.
  
  @section File Formats
  
 -Libav supports the following file formats through the @code{libavformat}
 +FFmpeg supports the following file formats through the @code{libavformat}
  library:
  
  @multitable @columnfractions .4 .1 .1 .4
  @item Name @tab Encoding @tab Decoding @tab Comments
 +@item 3dostr                    @tab   @tab X
  @item 4xm                       @tab   @tab X
      @tab 4X Technologies format, used in some games.
  @item 8088flex TMV              @tab   @tab X
 +@item AAX                       @tab   @tab X
 +    @tab Audible Enhanced Audio format, used in audiobooks.
 +@item AA                        @tab   @tab X
 +    @tab Audible Format 2, 3, and 4, used in audiobooks.
 +@item ACT Voice                 @tab   @tab X
 +    @tab contains G.729 audio
  @item Adobe Filmstrip           @tab X @tab X
  @item Audio IFF (AIFF)          @tab X @tab X
  @item American Laser Games MM   @tab   @tab X
  @item Amazing Studio Packed Animation File  @tab   @tab X
      @tab Multimedia format used in game Heart Of Darkness.
  @item Apple HTTP Live Streaming @tab   @tab X
 +@item Artworx Data Format       @tab   @tab X
 +@item Interplay ACM             @tab   @tab X
 +    @tab Audio only format used in some Interplay games.
 +@item ADP                       @tab   @tab X
 +    @tab Audio format used on the Nintendo Gamecube.
 +@item AFC                       @tab   @tab X
 +    @tab Audio format used on the Nintendo Gamecube.
 +@item ADS/SS2                   @tab   @tab X
 +    @tab Audio format used on the PS2.
 +@item APNG                      @tab X @tab X
  @item ASF                       @tab X @tab X
 +@item AST                       @tab X @tab X
 +    @tab Audio format used on the Nintendo Wii.
  @item AVI                       @tab X @tab X
  @item AviSynth                  @tab   @tab X
 +@item AVR                       @tab   @tab X
 +    @tab Audio format used on Mac.
  @item AVS                       @tab   @tab X
      @tab Multimedia format used by the Creature Shock game.
  @item Beam Software SIFF        @tab   @tab X
      @tab Audio and video format used in some games by Beam Software.
  @item Bethesda Softworks VID    @tab   @tab X
      @tab Used in some games from Bethesda Softworks.
 +@item Binary text               @tab   @tab X
  @item Bink                      @tab   @tab X
      @tab Multimedia format used by many games.
  @item Bitmap Brothers JV        @tab   @tab X
      @tab Used in Z and Z95 games.
  @item Brute Force & Ignorance   @tab   @tab X
      @tab Used in the game Flash Traffic: City of Angels.
 +@item BFSTM                     @tab   @tab X
 +    @tab Audio format used on the Nintendo WiiU (based on BRSTM).
 +@item BRSTM                     @tab   @tab X
 +    @tab Audio format used on the Nintendo Wii.
  @item BWF                       @tab X @tab X
  @item CRI ADX                   @tab X @tab X
      @tab Audio-only format used in console video games.
  @item Canopus HQX               @tab   @tab X
  @item CD+G                      @tab   @tab X
      @tab Video format used by CD+G karaoke disks
 +@item Phantom Cine              @tab   @tab X
 +@item Cineform HD               @tab   @tab X
  @item Commodore CDXL            @tab   @tab X
      @tab Amiga CD video format
 -@item Core Audio Format         @tab   @tab X
 +@item Core Audio Format         @tab X @tab X
      @tab Apple Core Audio Format
  @item CRC testing format        @tab X @tab
  @item Creative Voice            @tab X @tab X
      @tab Audio format used in some games by CRYO Interactive Entertainment.
  @item D-Cinema audio            @tab X @tab X
  @item Deluxe Paint Animation    @tab   @tab X
 +@item DCSTR                     @tab   @tab X
  @item DFA                       @tab   @tab X
      @tab This format is used in Chronomaster game
  @item DirectDraw Surface        @tab   @tab X
 +@item DSD Stream File (DSF)     @tab   @tab X
  @item DV video                  @tab X @tab X
  @item DXA                       @tab   @tab X
      @tab This format is used in the non-Windows version of the Feeble Files
  @item Electronic Arts cdata  @tab    @tab X
  @item Electronic Arts Multimedia  @tab    @tab X
      @tab Used in various EA games; files have extensions like WVE and UV2.
 +@item Ensoniq Paris Audio File  @tab   @tab X
 +@item FFM (FFserver live feed)  @tab X @tab X
  @item Flash (SWF)               @tab X @tab X
  @item Flash 9 (AVM2)            @tab X @tab X
      @tab Only embedded audio is decoded.
  @item framecrc testing format   @tab X @tab
  @item FunCom ISS                @tab   @tab X
      @tab Audio format used in various games from FunCom like The Longest Journey.
 -@item GIF Animation             @tab X @tab
 +@item G.723.1                   @tab X @tab X
 +@item G.726                     @tab   @tab X @tab Both left- and right-justified.
 +@item G.729 BIT                 @tab X @tab X
 +@item G.729 raw                 @tab   @tab X
 +@item GENH                      @tab   @tab X
 +    @tab Audio format for various games.
 +@item GIF Animation             @tab X @tab X
  @item GXF                       @tab X @tab X
      @tab General eXchange Format SMPTE 360M, used by Thomson Grass Valley
           playout servers.
  @item HNM @tab   @tab X
      @tab Only version 4 supported, used in some games from Cryo Interactive
 +@item iCEDraw File              @tab   @tab X
 +@item ICO                       @tab X @tab X
 +    @tab Microsoft Windows ICO
  @item id Quake II CIN video     @tab   @tab X
  @item id RoQ                    @tab X @tab X
 -    @tab Used in Quake III, Jedi Knight 2, other computer games.
 +    @tab Used in Quake III, Jedi Knight 2 and other computer games.
  @item IEC61937 encapsulation @tab X @tab X
  @item IFF                       @tab   @tab X
      @tab Interchange File Format
  @item iLBC                      @tab X @tab X
  @item Interplay MVE             @tab   @tab X
      @tab Format used in various Interplay computer games.
 +@item Iterated Systems ClearVideo @tab     @tab  X
 +    @tab I-frames only
  @item IV8                       @tab   @tab X
      @tab A format generated by IndigoVision 8000 video server.
  @item IVF (On2)                 @tab X @tab X
      @tab A format used by libvpx
 +@item Internet Video Recording  @tab   @tab X
 +@item IRCAM                     @tab X @tab X
  @item LATM                      @tab X @tab X
  @item LMLM4                     @tab   @tab X
      @tab Used by Linux Media Labs MPEG-4 PCI boards
 +@item LOAS                      @tab   @tab X
 +    @tab contains LATM multiplexed AAC audio
 +@item LRC                       @tab X @tab X
 +@item LVF                       @tab   @tab X
  @item LXF                       @tab   @tab X
      @tab VR native stream format, used by Leitch/Harris' video servers.
 +@item Magic Lantern Video (MLV) @tab   @tab X
  @item Matroska                  @tab X @tab X
  @item Matroska audio            @tab X @tab
  @item FFmpeg metadata           @tab X @tab X
  @item MAXIS XA                  @tab   @tab X
      @tab Used in Sim City 3000; file extension .xa.
  @item MD Studio                 @tab   @tab X
 +@item Metal Gear Solid: The Twin Snakes @tab @tab X
 +@item Megalux Frame             @tab   @tab X
 +    @tab Used by Megalux Ultimate Paint
  @item Mobotix .mxg              @tab   @tab X
  @item Monkey's Audio            @tab   @tab X
  @item Motion Pixels MVI         @tab   @tab X
      @tab also known as DVB Transport Stream
  @item MPEG-4                    @tab X @tab X
      @tab MPEG-4 is a variant of QuickTime.
 +@item MSF                       @tab   @tab X
 +    @tab Audio format used on the PS3.
  @item Mirillis FIC video        @tab   @tab X
      @tab No cursor rendering.
 +@item MIDI Sample Dump Standard @tab   @tab X
  @item MIME multipart JPEG       @tab X @tab
  @item MSN TCP webcam            @tab   @tab X
      @tab Used by MSN Messenger webcam streams.
      @tab SMPTE 386M, D-10/IMX Mapping.
  @item NC camera feed            @tab   @tab X
      @tab NC (AVIP NC4600) camera streams
 +@item NIST SPeech HEader REsources @tab   @tab X
 +@item Computerized Speech Lab NSP @tab   @tab X
  @item NTT TwinVQ (VQF)          @tab   @tab X
      @tab Nippon Telegraph and Telephone Corporation TwinVQ.
  @item Nullsoft Streaming Video  @tab   @tab X
      @tab NUT Open Container Format
  @item Ogg                       @tab X @tab X
  @item Playstation Portable PMP  @tab   @tab X
 +@item Portable Voice Format     @tab   @tab X
  @item TechnoTrend PVA           @tab   @tab X
      @tab Used by TechnoTrend DVB PCI boards.
  @item QCP                       @tab   @tab X
  @item raw ADTS (AAC)            @tab X @tab X
  @item raw AC-3                  @tab X @tab X
 +@item raw AMR-NB                @tab   @tab X
 +@item raw AMR-WB                @tab   @tab X
 +@item raw aptX                  @tab X @tab X
  @item raw Chinese AVS video     @tab X @tab X
  @item raw CRI ADX               @tab X @tab X
  @item raw Dirac                 @tab X @tab X
  @item raw DNxHD                 @tab X @tab X
  @item raw DTS                   @tab X @tab X
 +@item raw DTS-HD                @tab   @tab X
  @item raw E-AC-3                @tab X @tab X
  @item raw FLAC                  @tab X @tab X
  @item raw GSM                   @tab   @tab X
  @item raw Shorten               @tab   @tab X
  @item raw TAK                   @tab   @tab X
  @item raw TrueHD                @tab X @tab X
 -@item raw VC-1                  @tab   @tab X
 +@item raw VC-1                  @tab X @tab X
  @item raw PCM A-law             @tab X @tab X
  @item raw PCM mu-law            @tab X @tab X
  @item raw PCM signed 8 bit      @tab X @tab X
  @item raw PCM signed 24 bit little-endian  @tab X @tab X
  @item raw PCM signed 32 bit big-endian  @tab X @tab X
  @item raw PCM signed 32 bit little-endian  @tab X @tab X
 +@item raw PCM signed 64 bit big-endian  @tab X @tab X
 +@item raw PCM signed 64 bit little-endian  @tab X @tab X
  @item raw PCM unsigned 8 bit    @tab X @tab X
  @item raw PCM unsigned 16 bit big-endian  @tab X @tab X
  @item raw PCM unsigned 16 bit little-endian  @tab X @tab X
  @item raw PCM unsigned 24 bit little-endian  @tab X @tab X
  @item raw PCM unsigned 32 bit big-endian  @tab X @tab X
  @item raw PCM unsigned 32 bit little-endian  @tab X @tab X
 +@item raw PCM 16.8 floating point little-endian @tab   @tab X
 +@item raw PCM 24.0 floating point little-endian @tab   @tab X
  @item raw PCM floating-point 32 bit big-endian  @tab X @tab X
  @item raw PCM floating-point 32 bit little-endian  @tab X @tab X
  @item raw PCM floating-point 64 bit big-endian  @tab X @tab X
      @tab File format used by RED Digital cameras, contains JPEG 2000 frames and PCM audio.
  @item RealMedia                 @tab X @tab X
  @item Redirector                @tab   @tab X
 +@item RedSpark                  @tab   @tab X
  @item Renderware TeXture Dictionary @tab   @tab X
  @item Resolume DXV              @tab   @tab X
  @item RL2                       @tab   @tab X
      @tab Audio and video format used in some games by Entertainment Software Partners.
  @item RPL/ARMovie               @tab   @tab X
  @item Lego Mindstorms RSO       @tab X @tab X
 +@item RSD                       @tab   @tab X
  @item RTMP                      @tab X @tab X
      @tab Output is performed by publishing stream to RTMP server
  @item RTP                       @tab X @tab X
  @item RTSP                      @tab X @tab X
 +@item Sample Dump eXchange      @tab   @tab X
  @item SAP                       @tab X @tab X
 -@item Screenpresso              @tab   @tab X
 +@item SBG                       @tab   @tab X
  @item SDP                       @tab   @tab X
  @item Sega FILM/CPK             @tab   @tab X
      @tab Used in many Sega Saturn console games.
      @tab Multimedia format used by many games.
  @item SMJPEG                    @tab X @tab X
      @tab Used in certain Loki game ports.
 -@item Smush
 +@item SMPTE 337M encapsulation  @tab   @tab X
 +@item Smush                     @tab   @tab X
      @tab Multimedia format used in some LucasArts games.
  @item Sony OpenMG (OMA)         @tab X @tab X
      @tab Audio format used in Sony Sonic Stage and Sony Vegas.
  @item Sony PlayStation STR      @tab   @tab X
 -@item Sony Wave64 (W64)         @tab   @tab X
 +@item Sony Wave64 (W64)         @tab X @tab X
  @item SoX native format         @tab X @tab X
  @item SUN AU format             @tab X @tab X
 +@item SUP raw PGS subtitles     @tab X @tab X
 +@item SVAG                      @tab   @tab X
 +    @tab Audio format used in Konami PS2 games.
  @item TDSC                      @tab   @tab X
  @item Text files                @tab   @tab X
  @item THP                       @tab   @tab X
      @tab Used on the Nintendo GameCube.
  @item Tiertex Limited SEQ       @tab   @tab X
      @tab Tiertex .seq files used in the DOS CD-ROM version of the game Flashback.
 -@item True Audio                @tab   @tab X
 +@item True Audio                @tab X @tab X
 +@item VAG                       @tab   @tab X
 +    @tab Audio format used in many Sony PS2 games.
  @item VC-1 test bitstream       @tab X @tab X
  @item Vidvox Hap                @tab X @tab X
 +@item Vivo                      @tab   @tab X
 +@item VPK                       @tab   @tab X
 +    @tab Audio format used in Sony PS games.
  @item WAV                       @tab X @tab X
 -@item WavPack                   @tab   @tab X
 +@item WavPack                   @tab X @tab X
  @item WebM                      @tab X @tab X
 -@item Windows Televison (WTV)   @tab   @tab X
 +@item Windows Televison (WTV)   @tab X @tab X
  @item Wing Commander III movie  @tab   @tab X
      @tab Multimedia format used in Origin's Wing Commander III computer game.
  @item Westwood Studios audio    @tab   @tab X
      @tab Multimedia format used in Westwood Studios games.
  @item Westwood Studios VQA      @tab   @tab X
      @tab Multimedia format used in Westwood Studios games.
 +@item Wideband Single-bit Data (WSD) @tab   @tab X
 +@item WVE                       @tab   @tab X
  @item XMV                       @tab   @tab X
      @tab Microsoft video container used in Xbox games.
 +@item XVAG                      @tab   @tab X
 +    @tab Audio format used on the PS3.
  @item xWMA                      @tab   @tab X
      @tab Microsoft audio container used by XAudio 2.
 +@item eXtended BINary text (XBIN) @tab @tab X
  @item YUV4MPEG pipe             @tab X @tab X
  @item Psygnosis YOP             @tab   @tab X
 -@item ZeroCodec Lossless Video  @tab   @tab X
  @end multitable
  
  @code{X} means that encoding (resp. decoding) is supported.
  
  @section Image Formats
  
 -Libav can read and write images for each frame of a video sequence. The
 +FFmpeg can read and write images for each frame of a video sequence. The
  following image formats are supported:
  
  @multitable @columnfractions .4 .1 .1 .4
  @item Alias PIX    @tab X @tab X
      @tab Alias/Wavefront PIX image format
  @item animated GIF @tab X @tab X
 -    @tab Only uncompressed GIFs are generated.
 +@item APNG         @tab X @tab X
  @item BMP          @tab X @tab X
      @tab Microsoft BMP image
  @item BRender PIX  @tab   @tab X
      @tab Digital Picture Exchange
  @item EXR          @tab   @tab X
      @tab OpenEXR
 +@item FITS         @tab X @tab X
 +    @tab Flexible Image Transport System
  @item JPEG         @tab X @tab X
      @tab Progressive JPEG is not supported.
 -@item JPEG 2000    @tab E @tab X
 -    @tab encoding supported through external library libopenjpeg
 +@item JPEG 2000    @tab X @tab X
  @item JPEG-LS      @tab X @tab X
  @item LJPEG        @tab X @tab
      @tab Lossless JPEG
  @item PIC          @tab @tab X
      @tab Pictor/PC Paint
  @item PNG          @tab X @tab X
 -    @tab 2/4 bpp not supported yet
  @item PPM          @tab X @tab X
      @tab Portable PixelMap image
 +@item PSD          @tab   @tab X
 +    @tab Photoshop
  @item PTX          @tab   @tab X
      @tab V.Flash PTX format
  @item SGI          @tab X @tab X
      @tab WebP image format, encoding supported through external library libwebp
  @item XBM  @tab X @tab X
      @tab X BitMap image format
 +@item XFace @tab X @tab X
 +    @tab X-Face image format
 +@item XPM  @tab   @tab X
 +    @tab X PixMap image format
  @item XWD  @tab X @tab X
      @tab X Window Dump image format
  @end multitable
  @item 4X Movie               @tab     @tab  X
      @tab Used in certain computer games.
  @item 8088flex TMV           @tab     @tab  X
 -@item 8SVX exponential       @tab     @tab  X
 -@item 8SVX fibonacci         @tab     @tab  X
  @item A64 multicolor         @tab  X  @tab
      @tab Creates video suitable to be played on a commodore 64 (multicolor mode).
  @item Amazing Studio PAF Video @tab     @tab  X
  @item American Laser Games MM  @tab    @tab X
      @tab Used in games like Mad Dog McCree.
 -@item AMV Video              @tab     @tab  X
 +@item AMV Video              @tab  X  @tab  X
      @tab Used in Chinese MP3 players.
  @item ANSI/ASCII art         @tab     @tab  X
  @item Apple Intermediate Codec @tab     @tab  X
  @item Autodesk Animator Flic video  @tab     @tab  X
  @item Autodesk RLE           @tab     @tab  X
      @tab fourcc: AASC
 +@item Avid 1:1 10-bit RGB Packer  @tab  X  @tab  X
 +    @tab fourcc: AVrp
  @item AVS (Audio Video Standard) video  @tab     @tab  X
      @tab Video encoding used by the Creature Shock game.
 +@item AYUV                   @tab  X  @tab  X
 +    @tab Microsoft uncompressed packed 4:4:4:4
  @item Beam Software VB       @tab     @tab  X
  @item Bethesda VID video     @tab     @tab  X
      @tab Used in some games from Bethesda Softworks.
  @item Bink Video             @tab     @tab  X
 +@item BitJazz SheerVideo     @tab     @tab  X
  @item Bitmap Brothers JV video  @tab   @tab X
 +@item y41p Brooktree uncompressed 4:1:1 12-bit     @tab  X  @tab  X
  @item Brute Force & Ignorance   @tab   @tab X
      @tab Used in the game Flash Traffic: City of Angels.
  @item C93 video              @tab     @tab  X
      @tab Amiga CD video codec
  @item Chinese AVS video      @tab  E  @tab  X
      @tab AVS1-P2, JiZhun profile, encoding through external library libxavs
 -@item Cineform HD            @tab     @tab  X
  @item Delphine Software International CIN video  @tab     @tab  X
      @tab Codec used in Delphine Software International games.
  @item Discworld II BMV Video @tab     @tab  X
  @item Canopus Lossless Codec @tab     @tab  X
 -@item Cinepak                @tab  X  @tab  X
 +@item Cinepak                @tab     @tab  X
  @item Cirrus Logic AccuPak   @tab  X  @tab  X
      @tab fourcc: CLJR
 +@item CPiA Video Format      @tab     @tab  X
  @item Creative YUV (CYUV)    @tab     @tab  X
  @item DFA                    @tab     @tab  X
      @tab Codec used in Chronomaster game.
 -@item Dirac                  @tab  E  @tab  E
 -    @tab supported through external library libschroedinger
 +@item Dirac                  @tab  E  @tab  X
 +    @tab supported though the native vc2 (Dirac Pro) encoder
  @item Deluxe Paint Animation @tab     @tab  X
  @item DNxHD                  @tab   X @tab  X
      @tab aka SMPTE VC3
  @item Escape 124             @tab     @tab  X
  @item Escape 130             @tab     @tab  X
  @item FFmpeg video codec #1  @tab  X  @tab  X
 -    @tab experimental lossless codec (fourcc: FFV1)
 +    @tab lossless codec (fourcc: FFV1)
  @item Flash Screen Video v1  @tab  X  @tab  X
      @tab fourcc: FSV1
 -@item Flash Screen Video v2  @tab     @tab  X
 +@item Flash Screen Video v2  @tab  X  @tab  X
  @item Flash Video (FLV)      @tab  X  @tab  X
      @tab Sorenson H.263 used in Flash
  @item FM Screen Capture Codec  @tab     @tab  X
      @tab Used in the game Cyberia from Interplay.
  @item Interplay MVE video    @tab     @tab  X
      @tab Used in Interplay .MVE files.
 -@item Iterated Systems ClearVideo @tab     @tab  X
 -    @tab I-frames only
 +@item J2K @tab  X  @tab  X
  @item Karl Morton's video codec  @tab     @tab  X
      @tab Codec used in Worms games.
  @item Kega Game Video (KGV1) @tab      @tab  X
  @item LCL (LossLess Codec Library) MSZH  @tab     @tab  X
  @item LCL (LossLess Codec Library) ZLIB  @tab  E  @tab  E
  @item LOCO                   @tab     @tab  X
 -@item LucasArts SANM         @tab     @tab  X
 -    @tab Used in LucasArts SMUSH animations.
 +@item LucasArts SANM/Smush   @tab     @tab  X
 +    @tab Used in LucasArts games / SMUSH animations.
  @item lossless MJPEG         @tab  X  @tab  X
 -@item MagicYUV Lossless Video @tab    @tab  X
 +@item MagicYUV Video         @tab  X  @tab  X
 +@item Mandsoft Screen Capture Codec  @tab     @tab  X
  @item Microsoft ATC Screen   @tab     @tab  X
      @tab Also known as Microsoft Screen 3.
  @item Microsoft Expression Encoder Screen  @tab     @tab  X
  @item MPEG-4 part 2 Microsoft variant version 1  @tab     @tab  X
  @item MPEG-4 part 2 Microsoft variant version 2  @tab  X  @tab  X
  @item MPEG-4 part 2 Microsoft variant version 3  @tab  X  @tab  X
 +@item Newtek SpeedHQ               @tab     @tab  X
  @item Nintendo Gamecube THP video  @tab     @tab  X
  @item NuppelVideo/RTjpeg     @tab     @tab  X
      @tab Video encoding used in NuppelVideo files.
  @item VP8                    @tab  E  @tab  X
      @tab fourcc: VP80, encoding supported through external library libvpx
  @item VP9                    @tab  E  @tab  X
 -    @tab Encoding supported through external library libvpx
 -@item planar RGB             @tab     @tab  X
 -    @tab fourcc: 8BPS
 +    @tab encoding supported through external library libvpx
 +@item Pinnacle TARGA CineWave YUV16 @tab     @tab  X
 +    @tab fourcc: Y216
 +@item Prores                 @tab     @tab  X
 +    @tab fourcc: apch,apcn,apcs,apco
  @item Q-team QPEG            @tab     @tab  X
      @tab fourccs: QPEG, Q1.0, Q1.1
  @item QuickTime 8BPS video   @tab     @tab  X
      @tab fourcc: 'smc '
  @item QuickTime video (RPZA) @tab     @tab  X
      @tab fourcc: rpza
 -@item R10K AJA Kona 10-bit RGB Codec     @tab     @tab  X
 -@item R210 Quicktime Uncompressed RGB 10-bit     @tab     @tab  X
 +@item R10K AJA Kona 10-bit RGB Codec     @tab  X  @tab  X
 +@item R210 Quicktime Uncompressed RGB 10-bit     @tab  X  @tab  X
  @item Raw Video              @tab  X  @tab  X
  @item RealVideo 1.0          @tab  X  @tab  X
  @item RealVideo 2.0          @tab  X  @tab  X
      @tab Texture dictionaries used by the Renderware Engine.
  @item RL2 video              @tab     @tab  X
      @tab used in some games by Entertainment Software Partners
 +@item ScreenPressor          @tab     @tab  X
 +@item Screenpresso           @tab     @tab  X
 +@item Screen Recorder Gold Codec  @tab     @tab  X
  @item Sierra VMD video       @tab     @tab  X
      @tab Used in Sierra VMD files.
  @item Silicon Graphics Motion Video Compressor 1 (MVC1)  @tab     @tab  X
  @item Smacker video          @tab     @tab  X
      @tab Video encoding used in Smacker.
  @item SMPTE VC-1             @tab     @tab  X
 +@item Snow                   @tab  X  @tab  X
 +    @tab experimental wavelet codec (fourcc: SNOW)
  @item Sony PlayStation MDEC (Motion DECoder)  @tab     @tab  X
  @item Sorenson Vector Quantizer 1  @tab  X  @tab  X
      @tab fourcc: SVQ1
      @tab Codec used in DOS CD-ROM FlashBack game.
  @item Ut Video               @tab  X  @tab  X
  @item v210 QuickTime uncompressed 4:2:2 10-bit     @tab  X  @tab  X
 +@item v308 QuickTime uncompressed 4:4:4            @tab  X  @tab  X
 +@item v408 QuickTime uncompressed 4:4:4:4          @tab  X  @tab  X
  @item v410 QuickTime uncompressed 4:4:4 10-bit     @tab  X  @tab  X
  @item VBLE Lossless Codec    @tab     @tab  X
  @item VMware Screen Codec / VMware Video  @tab     @tab  X
  @item WMV7                   @tab  X  @tab  X
  @item YAMAHA SMAF            @tab  X  @tab  X
  @item Psygnosis YOP Video    @tab     @tab  X
 +@item yuv4                   @tab  X  @tab  X
 +    @tab libquicktime uncompressed packed 4:2:0
 +@item ZeroCodec Lossless Video @tab     @tab  X
  @item ZLIB                   @tab  X  @tab  X
      @tab part of LCL, encoder experimental
  @item Zip Motion Blocks Video  @tab   X @tab  X
  
  @multitable @columnfractions .4 .1 .1 .4
  @item Name @tab Encoding @tab Decoding @tab Comments
 -@item 8SVX audio             @tab     @tab  X
 -@item AAC                    @tab  E  @tab  X
 -    @tab encoding supported through external library libfaac and libvo-aacenc
 -@item AC-3                   @tab IX  @tab  X
 +@item 8SVX exponential       @tab     @tab  X
 +@item 8SVX fibonacci         @tab     @tab  X
 +@item AAC                    @tab EX  @tab  X
 +    @tab encoding supported through internal encoder and external library libfdk-aac
 +@item AAC+                   @tab  E  @tab  IX
 +    @tab encoding supported through external library libfdk-aac
 +@item AC-3                   @tab IX  @tab  IX
  @item ADPCM 4X Movie         @tab     @tab  X
 +@item APDCM Yamaha AICA      @tab     @tab  X
  @item ADPCM CDROM XA         @tab     @tab  X
  @item ADPCM Creative Technology @tab     @tab  X
      @tab 16 -> 4, 8 -> 4, 8 -> 3, 8 -> 2
  @item ADPCM IMA Westwood     @tab     @tab  X
  @item ADPCM ISS IMA          @tab     @tab  X
      @tab Used in FunCom games.
 +@item ADPCM IMA Dialogic     @tab     @tab  X
  @item ADPCM IMA Duck DK3     @tab     @tab  X
      @tab Used in some Sega Saturn console games.
  @item ADPCM IMA Duck DK4     @tab     @tab  X
      @tab Used in some Sega Saturn console games.
 +@item ADPCM IMA Radical      @tab     @tab  X
  @item ADPCM Microsoft        @tab  X  @tab  X
  @item ADPCM MS IMA           @tab  X  @tab  X
 -@item ADPCM Nintendo Gamecube THP  @tab     @tab  X
 +@item ADPCM Nintendo Gamecube AFC  @tab     @tab  X
 +@item ADPCM Nintendo Gamecube DTK  @tab     @tab  X
 +@item ADPCM Nintendo THP  @tab     @tab  X
 +@item APDCM Playstation      @tab     @tab  X
  @item ADPCM QT IMA           @tab  X  @tab  X
  @item ADPCM SEGA CRI ADX     @tab  X  @tab  X
      @tab Used in Sega Dreamcast games.
  @item ADPCM Shockwave Flash  @tab  X  @tab  X
 -@item ADPCM SMJPEG IMA       @tab     @tab  X
 -    @tab Used in certain Loki game ports.
  @item ADPCM Sound Blaster Pro 2-bit  @tab     @tab  X
  @item ADPCM Sound Blaster Pro 2.6-bit  @tab     @tab  X
  @item ADPCM Sound Blaster Pro 4-bit  @tab     @tab  X
 -@item ADPCM VIMA
 +@item ADPCM VIMA             @tab     @tab  X
      @tab Used in LucasArts SMUSH animations.
  @item ADPCM Westwood Studios IMA @tab     @tab  X
      @tab Used in Westwood Studios games like Command and Conquer.
  @item Amazing Studio PAF Audio @tab     @tab  X
  @item Apple lossless audio   @tab  X  @tab  X
      @tab QuickTime fourcc 'alac'
 +@item aptX                   @tab  X  @tab  X
 +    @tab Used in Bluetooth A2DP
  @item ATRAC1                 @tab     @tab  X
  @item ATRAC3                 @tab     @tab  X
  @item ATRAC3+                @tab     @tab  X
  @item Bink Audio             @tab     @tab  X
      @tab Used in Bink and Smacker files in many games.
 +@item CELT                   @tab     @tab  E
 +    @tab decoding supported through external library libcelt
  @item Delphine Software International CIN audio  @tab     @tab  X
      @tab Codec used in Delphine Software International games.
  @item Digital Speech Standard - Standard Play mode (DSS SP) @tab     @tab  X
  @item Discworld II BMV Audio @tab     @tab  X
  @item COOK                   @tab     @tab  X
      @tab All versions except 5.1 are supported.
 -@item DCA (DTS Coherent Acoustics)  @tab     @tab  X
 -    @tab supported extensions: XCh, XLL (partially)
 +@item DCA (DTS Coherent Acoustics)  @tab  X  @tab  X
 +    @tab supported extensions: XCh, XXCH, X96, XBR, XLL, LBR (partially)
 +@item Dolby E  @tab     @tab  X
  @item DPCM id RoQ            @tab  X  @tab  X
 -    @tab Used in Quake III, Jedi Knight 2, other computer games.
 +    @tab Used in Quake III, Jedi Knight 2 and other computer games.
  @item DPCM Interplay         @tab     @tab  X
      @tab Used in various Interplay computer games.
 +@item DPCM Squareroot-Delta-Exact  @tab  @tab  X
 +    @tab Used in various games.
  @item DPCM Sierra Online     @tab     @tab  X
      @tab Used in Sierra Online game audio files.
  @item DPCM Sol               @tab     @tab  X
  @item DPCM Xan               @tab     @tab  X
      @tab Used in Origin's Wing Commander IV AVI files.
 +@item DSD (Direct Stream Digitial), least significant bit first  @tab  @tab  X
 +@item DSD (Direct Stream Digitial), most significant bit first   @tab  @tab  X
 +@item DSD (Direct Stream Digitial), least significant bit first, planar  @tab  @tab  X
 +@item DSD (Direct Stream Digitial), most significant bit first, planar   @tab  @tab  X
  @item DSP Group TrueSpeech   @tab     @tab  X
 +@item DST (Direct Stream Transfer) @tab  @tab  X
  @item DV audio               @tab     @tab  X
  @item Enhanced AC-3          @tab  X  @tab  X
 +@item EVRC (Enhanced Variable Rate Codec) @tab     @tab  X
  @item FLAC (Free Lossless Audio Codec)  @tab  X  @tab  IX
 -@item G.723.1                @tab  X  @tab  X
 +@item G.723.1                @tab X   @tab  X
 +@item G.729                  @tab     @tab  X
  @item GSM                    @tab  E  @tab  X
      @tab encoding supported through external library libgsm
  @item GSM Microsoft variant  @tab  E  @tab  X
  @item iLBC (Internet Low Bitrate Codec) @tab  E  @tab  E
      @tab encoding and decoding supported through external library libilbc
  @item IMC (Intel Music Coder)  @tab     @tab  X
 +@item Interplay ACM            @tab     @tab  X
  @item MACE (Macintosh Audio Compression/Expansion) 3:1  @tab     @tab  X
  @item MACE (Macintosh Audio Compression/Expansion) 6:1  @tab     @tab  X
 -@item MLP (Meridian Lossless Packing)  @tab     @tab  X
 +@item MLP (Meridian Lossless Packing)  @tab  X  @tab  X
      @tab Used in DVD-Audio discs.
  @item Monkey's Audio         @tab     @tab  X
 -    @tab Only versions 3.97-3.99 are supported.
  @item MP1 (MPEG audio layer 1)  @tab     @tab IX
 -@item MP2 (MPEG audio layer 2)  @tab IE  @tab IX
 +@item MP2 (MPEG audio layer 2)  @tab IX  @tab IX
      @tab encoding supported also through external library TwoLAME
  @item MP3 (MPEG audio layer 3)  @tab  E  @tab IX
      @tab encoding supported through external library LAME, ADU MP3 and MP3onMP4 also supported
  @item Musepack SV8           @tab     @tab  X
  @item Nellymoser Asao        @tab  X  @tab  X
  @item On2 AVC (Audio for Video Codec) @tab     @tab  X
 -@item Opus                   @tab  E  @tab  E
 -    @tab supported through external library libopus
 +@item Opus                   @tab  E  @tab  X
 +    @tab encoding supported through external library libopus
  @item PCM A-law              @tab  X  @tab  X
  @item PCM mu-law             @tab  X  @tab  X
 -@item PCM signed 16-bit big-endian planar  @tab     @tab  X
 -@item PCM signed 16-bit little-endian planar  @tab     @tab  X
 -@item PCM signed 24-bit little-endian planar  @tab     @tab  X
 -@item PCM signed 32-bit little-endian planar  @tab     @tab  X
 +@item PCM signed 8-bit planar  @tab  X  @tab  X
 +@item PCM signed 16-bit big-endian planar  @tab  X  @tab  X
 +@item PCM signed 16-bit little-endian planar  @tab  X  @tab  X
 +@item PCM signed 24-bit little-endian planar  @tab  X  @tab  X
 +@item PCM signed 32-bit little-endian planar  @tab  X  @tab  X
  @item PCM 32-bit floating point big-endian  @tab  X  @tab  X
  @item PCM 32-bit floating point little-endian  @tab  X  @tab  X
  @item PCM 64-bit floating point big-endian  @tab  X  @tab  X
  @item PCM unsigned 32-bit little-endian  @tab  X  @tab  X
  @item PCM Zork               @tab     @tab  X
  @item QCELP / PureVoice      @tab     @tab  X
 +@item QDesign Music Codec 1  @tab     @tab  X
  @item QDesign Music Codec 2  @tab     @tab  X
      @tab There are still some distortions.
  @item RealAudio 1.0 (14.4K)  @tab  X  @tab  X
  @item Sierra VMD audio       @tab     @tab  X
      @tab Used in Sierra VMD files.
  @item Smacker audio          @tab     @tab  X
 -@item SMPTE 302M AES3 audio  @tab     @tab  X
 +@item SMPTE 302M AES3 audio  @tab  X  @tab  X
 +@item Sonic                  @tab  X  @tab  X
 +    @tab experimental codec
 +@item Sonic lossless         @tab  X  @tab  X
 +    @tab experimental codec
  @item Speex                  @tab  E  @tab  E
      @tab supported through external library libspeex
  @item TAK (Tom's lossless Audio Kompressor)  @tab     @tab  X
 -@item True Audio (TTA)       @tab     @tab  X
 -@item TrueHD                 @tab     @tab  X
 +@item True Audio (TTA)       @tab  X  @tab  X
 +@item TrueHD                 @tab  X  @tab  X
      @tab Used in HD-DVD and Blu-Ray discs.
  @item TwinVQ (VQF flavor)    @tab     @tab  X
 +@item VIMA                   @tab     @tab  X
 +    @tab Used in LucasArts SMUSH animations.
  @item Vorbis                 @tab  E  @tab  X
      @tab A native but very primitive encoder exists.
  @item Voxware MetaSound      @tab     @tab  X
 -@item WavPack                @tab  E  @tab  X
 -    @tab supported through external library libwavpack
 +@item WavPack                @tab  X  @tab  X
  @item Westwood Audio (SND1)  @tab     @tab  X
  @item Windows Media Audio 1  @tab  X  @tab  X
  @item Windows Media Audio 2  @tab  X  @tab  X
  @item Windows Media Audio Lossless @tab  @tab  X
  @item Windows Media Audio Pro @tab    @tab  X
  @item Windows Media Audio Voice @tab  @tab  X
 +@item Xbox Media Audio 1     @tab     @tab  X
 +@item Xbox Media Audio 2     @tab     @tab  X
  @end multitable
  
  @code{X} means that encoding (resp. decoding) is supported.
@@@ -1145,41 -1030,21 +1157,41 @@@ performance on systems without hardwar
  
  @multitable @columnfractions .4 .1 .1 .1 .1
  @item Name @tab Muxing @tab Demuxing @tab Encoding @tab Decoding
 -@item SSA/ASS      @tab X @tab X @tab X @tab X
 -@item DVB          @tab X @tab X @tab X @tab X
 -@item DVD          @tab X @tab X @tab X @tab X
 -@item PGS          @tab   @tab   @tab   @tab X
 -@item SubRip (SRT) @tab X @tab X @tab   @tab X
 -@item XSUB         @tab   @tab   @tab X @tab X
 +@item 3GPP Timed Text  @tab   @tab   @tab X @tab X
 +@item AQTitle          @tab   @tab X @tab   @tab X
 +@item DVB              @tab X @tab X @tab X @tab X
 +@item DVB teletext     @tab   @tab X @tab   @tab E
 +@item DVD              @tab X @tab X @tab X @tab X
 +@item JACOsub          @tab X @tab X @tab   @tab X
 +@item MicroDVD         @tab X @tab X @tab   @tab X
 +@item MPL2             @tab   @tab X @tab   @tab X
 +@item MPsub (MPlayer)  @tab   @tab X @tab   @tab X
 +@item PGS              @tab   @tab   @tab   @tab X
 +@item PJS (Phoenix)    @tab   @tab X @tab   @tab X
 +@item RealText         @tab   @tab X @tab   @tab X
 +@item SAMI             @tab   @tab X @tab   @tab X
 +@item Spruce format (STL) @tab   @tab X @tab   @tab X
 +@item SSA/ASS          @tab X @tab X @tab X @tab X
 +@item SubRip (SRT)     @tab X @tab X @tab X @tab X
 +@item SubViewer v1     @tab   @tab X @tab   @tab X
 +@item SubViewer        @tab   @tab X @tab   @tab X
 +@item TED Talks captions @tab @tab X @tab   @tab X
 +@item VobSub (IDX+SUB) @tab   @tab X @tab   @tab X
 +@item VPlayer          @tab   @tab X @tab   @tab X
 +@item WebVTT           @tab X @tab X @tab X @tab X
 +@item XSUB             @tab   @tab   @tab X @tab X
  @end multitable
  
  @code{X} means that the feature is supported.
  
 +@code{E} means that support is provided through an external library.
 +
  @section Network Protocols
  
  @multitable @columnfractions .4 .1
  @item Name         @tab Support
  @item file         @tab X
 +@item FTP          @tab X
  @item Gopher       @tab X
  @item HLS          @tab X
  @item HTTP         @tab X
  @item MMSH         @tab X
  @item MMST         @tab X
  @item pipe         @tab X
 +@item Pro-MPEG FEC @tab X
  @item RTMP         @tab X
  @item RTMPE        @tab X
  @item RTMPS        @tab X
  @item RTMPTE       @tab X
  @item RTMPTS       @tab X
  @item RTP          @tab X
 +@item SAMBA        @tab E
  @item SCTP         @tab X
 +@item SFTP         @tab E
  @item TCP          @tab X
  @item TLS          @tab X
  @item UDP          @tab X
  @item Name              @tab Input  @tab Output
  @item ALSA              @tab X      @tab X
  @item BKTR              @tab X      @tab
 -@item Linux framebuffer @tab X      @tab
 +@item caca              @tab        @tab X
 +@item DV1394            @tab X      @tab
 +@item Lavfi virtual device @tab X   @tab
 +@item Linux framebuffer @tab X      @tab X
  @item JACK              @tab X      @tab
  @item LIBCDIO           @tab X
  @item LIBDC1394         @tab X      @tab
 +@item OpenAL            @tab X
 +@item OpenGL            @tab        @tab X
  @item OSS               @tab X      @tab X
 -@item Pulseaudio        @tab X      @tab
 -@item Video4Linux2      @tab X      @tab
 +@item PulseAudio        @tab X      @tab X
 +@item SDL               @tab        @tab X
 +@item Video4Linux2      @tab X      @tab X
  @item VfW capture       @tab X      @tab
  @item X11 grabbing      @tab X      @tab
 +@item Win32 grabbing    @tab X      @tab
  @end multitable
  
  @code{X} means that input/output is supported.
  
 +@section Timecode
 +
 +@multitable @columnfractions .4 .1 .1
 +@item Codec/format      @tab Read   @tab Write
 +@item AVI               @tab X      @tab X
 +@item DV                @tab X      @tab X
 +@item GXF               @tab X      @tab X
 +@item MOV               @tab X      @tab X
 +@item MPEG1/2           @tab X      @tab X
 +@item MXF               @tab X      @tab X
 +@end multitable
 +
  @bye
diff --combined libavcodec/amfenc.c
@@@ -1,26 -1,29 +1,26 @@@
  /*
 - * AMD AMF support
 - * Copyright (C) 2017 Luca Barbato
 - * Copyright (C) 2017 Mikhail Mironov <mikhail.mironov@amd.com>
 + * This file is part of FFmpeg.
   *
 - * This file is part of Libav.
 - *
 - * Libav is free software; you can redistribute it and/or
 + * FFmpeg is free software; you can redistribute it and/or
   * modify it under the terms of the GNU Lesser General Public
   * License as published by the Free Software Foundation; either
   * version 2.1 of the License, or (at your option) any later version.
   *
 - * Libav is distributed in the hope that it will be useful,
 + * FFmpeg is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   * Lesser General Public License for more details.
   *
   * You should have received a copy of the GNU Lesser General Public
 - * License along with Libav; if not, write to the Free Software
 + * License along with FFmpeg; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
   */
  
 +#include "config.h"
 +
  #include "libavutil/avassert.h"
  #include "libavutil/imgutils.h"
  #include "libavutil/hwcontext.h"
 -#include "internal.h"
  #if CONFIG_D3D11VA
  #include "libavutil/hwcontext_d3d11va.h"
  #endif
  #include "libavutil/time.h"
  
  #include "amfenc.h"
 +#include "internal.h"
  
  #if CONFIG_D3D11VA
  #include <d3d11.h>
  #endif
  
 -#if HAVE_WINDOWS_H
 -#include <windows.h>
 -#define dlopen(filename, flags) LoadLibrary((filename))
 -#define dlsym(handle, symbol)   GetProcAddress(handle, symbol)
 -#define dlclose(handle)         FreeLibrary(handle)
 +#ifdef _WIN32
 +#include "compat/w32dlfcn.h"
  #else
  #include <dlfcn.h>
  #endif
  
 +#define FFMPEG_AMF_WRITER_ID L"ffmpeg_amf"
 +
  #define PTS_PROP L"PtsProp"
  
  const enum AVPixelFormat ff_amf_pix_fmts[] = {
@@@ -63,8 -66,8 +63,8 @@@ static const FormatMap format_map[] 
  {
      { AV_PIX_FMT_NONE,       AMF_SURFACE_UNKNOWN },
      { AV_PIX_FMT_NV12,       AMF_SURFACE_NV12 },
 -//    { AV_PIX_FMT_BGR0,       AMF_SURFACE_BGRA },
 -//    { AV_PIX_FMT_RGB0,       AMF_SURFACE_RGBA },
 +    { AV_PIX_FMT_BGR0,       AMF_SURFACE_BGRA },
 +    { AV_PIX_FMT_RGB0,       AMF_SURFACE_RGBA },
      { AV_PIX_FMT_GRAY8,      AMF_SURFACE_GRAY8 },
      { AV_PIX_FMT_YUV420P,    AMF_SURFACE_YUV420P },
      { AV_PIX_FMT_YUYV422,    AMF_SURFACE_YUY2 },
@@@ -157,7 -160,7 +157,7 @@@ static int amf_init_context(AVCodecCont
      AmfContext         *ctx = avctx->priv_data;
      AMF_RESULT          res = AMF_OK;
  
-     // confugure AMF logger
+     // configure AMF logger
      // the return of these functions indicates old state and do not affect behaviour
      ctx->trace->pVtbl->EnableWriter(ctx->trace, AMF_TRACE_WRITER_DEBUG_OUTPUT, ctx->log_to_dbg != 0 );
      if (ctx->log_to_dbg)
      // connect AMF logger to av_log
      ctx->tracer.vtbl = &tracer_vtbl;
      ctx->tracer.avctx = avctx;
 -    ctx->trace->pVtbl->RegisterWriter(ctx->trace, ctx->writer_id, (AMFTraceWriter*)&ctx->tracer, 1);
 -    ctx->trace->pVtbl->SetWriterLevel(ctx->trace, ctx->writer_id, AMF_TRACE_TRACE);
 +    ctx->trace->pVtbl->RegisterWriter(ctx->trace, FFMPEG_AMF_WRITER_ID,(AMFTraceWriter*)&ctx->tracer, 1);
 +    ctx->trace->pVtbl->SetWriterLevel(ctx->trace, FFMPEG_AMF_WRITER_ID, AMF_TRACE_TRACE);
  
      res = ctx->factory->pVtbl->CreateContext(ctx->factory, &ctx->context);
      AMF_RETURN_IF_FALSE(ctx, res == AMF_OK, AVERROR_UNKNOWN, "CreateContext() failed with error %d\n", res);
@@@ -280,7 -283,7 +280,7 @@@ int av_cold ff_amf_encode_close(AVCodec
      av_buffer_unref(&ctx->hw_frames_ctx);
  
      if (ctx->trace) {
 -        ctx->trace->pVtbl->UnregisterWriter(ctx->trace, ctx->writer_id);
 +        ctx->trace->pVtbl->UnregisterWriter(ctx->trace, FFMPEG_AMF_WRITER_ID);
      }
      if (ctx->library) {
          dlclose(ctx->library);
      ctx->version = 0;
      ctx->delayed_drain = 0;
      av_frame_free(&ctx->delayed_frame);
 -    av_fifo_free(ctx->timestamp_list);
 -    ctx->timestamp_list = NULL;
 -    ctx->timestamp_last = 0;
 +    av_fifo_freep(&ctx->timestamp_list);
  
      return 0;
  }
@@@ -347,11 -352,13 +347,11 @@@ static inline int timestamp_queue_enque
  {
      AmfContext         *ctx = avctx->priv_data;
      if (av_fifo_space(ctx->timestamp_list) < sizeof(timestamp)) {
 -        int size = av_fifo_size(ctx->timestamp_list);
 -        if (INT_MAX / 2 - size < sizeof(timestamp))
 -            return AVERROR(EINVAL);
 -        av_fifo_realloc2(ctx->timestamp_list, (size + sizeof(timestamp)) * 2);
 +        if (av_fifo_grow(ctx->timestamp_list, sizeof(timestamp)) < 0) {
 +            return AVERROR(ENOMEM);
 +        }
      }
      av_fifo_generic_write(ctx->timestamp_list, &timestamp, sizeof(timestamp), NULL);
 -    ctx->timestamp_last = timestamp;
      return 0;
  }
  
@@@ -363,7 -370,8 +363,7 @@@ static int amf_copy_buffer(AVCodecConte
      int64_t                 timestamp = AV_NOPTS_VALUE;
      int64_t                 size = buffer->pVtbl->GetSize(buffer);
  
 -    //if ((ret = ff_alloc_packet2(avctx, pkt, size, 0)) < 0) {
 -    if  (ret = ff_alloc_packet(pkt, size)) {
 +    if ((ret = ff_alloc_packet2(avctx, pkt, size, 0)) < 0) {
          return ret;
      }
      memcpy(pkt->data, buffer->pVtbl->GetNative(buffer), size);
  
      // calc dts shift if max_b_frames > 0
      if (avctx->max_b_frames > 0 && ctx->dts_delay == 0) {
 +        int64_t timestamp_last = AV_NOPTS_VALUE;
          AMF_RETURN_IF_FALSE(ctx, av_fifo_size(ctx->timestamp_list) > 0, AVERROR_UNKNOWN,
              "timestamp_list is empty while max_b_frames = %d\n", avctx->max_b_frames);
 -
 -        if (timestamp < 0 || ctx->timestamp_last < AV_NOPTS_VALUE) {
 +        av_fifo_generic_peek_at(
 +            ctx->timestamp_list,
 +            &timestamp_last,
 +            (av_fifo_size(ctx->timestamp_list) / sizeof(timestamp) - 1) * sizeof(timestamp_last),
 +            sizeof(timestamp_last),
 +            NULL);
 +        if (timestamp < 0 || timestamp_last < AV_NOPTS_VALUE) {
              return AVERROR(ERANGE);
          }
 -        ctx->dts_delay = ctx->timestamp_last - timestamp;
 +        ctx->dts_delay = timestamp_last - timestamp;
      }
      pkt->dts = timestamp - ctx->dts_delay;
      return 0;
  }
  
- // amfenc API implmentation
+ // amfenc API implementation
  int ff_amf_encode_init(AVCodecContext *avctx)
  {
      AmfContext     *ctx = avctx->priv_data;
diff --combined libavcodec/amfenc_h264.c
@@@ -1,18 -1,22 +1,18 @@@
  /*
 - * AMD AMF support
 - * Copyright (C) 2017 Luca Barbato
 - * Copyright (C) 2017 Mikhail Mironov <mikhail.mironov@amd.com>
 + * This file is part of FFmpeg.
   *
 - * This file is part of Libav.
 - *
 - * 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
   */
  
@@@ -66,10 -70,10 +66,10 @@@ static const AVOption options[] = 
  
  
      /// Quality Preset
 -    { "quality_preset",        "Quality Preference",                   OFFSET(quality),    AV_OPT_TYPE_INT,   { .i64 = AMF_VIDEO_ENCODER_QUALITY_PRESET_SPEED    }, AMF_VIDEO_ENCODER_QUALITY_PRESET_BALANCED, AMF_VIDEO_ENCODER_QUALITY_PRESET_QUALITY, VE, "quality_preset" },
 -    { "speed",          "Prefer Speed",                         0,                  AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_QUALITY_PRESET_SPEED    },       0, 0, VE, "quality_preset" },
 -    { "balanced",       "Balanced",                             0,                  AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_QUALITY_PRESET_BALANCED },    0, 0, VE, "quality_preset" },
 -    { "quality",        "Prefer Quality",                       0,                  AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_QUALITY_PRESET_QUALITY  },     0, 0, VE, "quality_preset" },
 +    { "quality",        "Quality Preference",                   OFFSET(quality),    AV_OPT_TYPE_INT,   { .i64 = AMF_VIDEO_ENCODER_QUALITY_PRESET_SPEED    }, AMF_VIDEO_ENCODER_QUALITY_PRESET_BALANCED, AMF_VIDEO_ENCODER_QUALITY_PRESET_QUALITY, VE, "quality" },
 +    { "speed",          "Prefer Speed",                         0,                  AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_QUALITY_PRESET_SPEED    },       0, 0, VE, "quality" },
 +    { "balanced",       "Balanced",                             0,                  AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_QUALITY_PRESET_BALANCED },    0, 0, VE, "quality" },
 +    { "quality",        "Prefer Quality",                       0,                  AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_QUALITY_PRESET_QUALITY  },     0, 0, VE, "quality" },
  
      // Dynamic
      /// Rate Control Method
      { "vbr_latency",    "Latency Constrained Variable Bitrate", 0,                         AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_RATE_CONTROL_METHOD_LATENCY_CONSTRAINED_VBR }, 0, 0, VE, "rc" },
  
      /// Enforce HRD, Filler Data, VBAQ, Frame Skipping
 -    { "enforce_hrd",    "Enforce HRD",                          OFFSET(enforce_hrd),        AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VE },
 -    { "filler_data",    "Filler Data Enable",                   OFFSET(filler_data),        AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VE },
 -    { "vbaq",           "Enable VBAQ",                          OFFSET(enable_vbaq),        AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VE },
 -    { "frame_skipping", "Rate Control Based Frame Skip",        OFFSET(skip_frame),         AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VE },
 +    { "enforce_hrd",    "Enforce HRD",                          OFFSET(enforce_hrd),        AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE },
 +    { "filler_data",    "Filler Data Enable",                   OFFSET(filler_data),        AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE },
 +    { "vbaq",           "Enable VBAQ",                          OFFSET(enable_vbaq),        AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE },
 +    { "frame_skipping", "Rate Control Based Frame Skip",        OFFSET(skip_frame),         AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE },
  
      /// QP Values
      { "qp_i",           "Quantization Parameter for I-Frame",   OFFSET(qp_i),               AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 51, VE },
@@@ -91,7 -95,7 +91,7 @@@
      { "qp_b",           "Quantization Parameter for B-Frame",   OFFSET(qp_b),               AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 51, VE },
  
      /// Pre-Pass, Pre-Analysis, Two-Pass
 -    { "preanalysis",    "Pre-Analysis Mode",                    OFFSET(preanalysis),        AV_OPT_TYPE_INT,{ .i64 = 0 }, 0, 1, VE, NULL },
 +    { "preanalysis",    "Pre-Analysis Mode",                    OFFSET(preanalysis),        AV_OPT_TYPE_BOOL,{ .i64 = 0 }, 0, 1, VE, NULL },
  
      /// Maximum Access Unit Size
      { "max_au_size",    "Maximum Access Unit Size for rate control (in bits)",   OFFSET(max_au_size),        AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, VE },
      /// B-Frames
      // BPicturesPattern=bf
      { "bf_delta_qp",    "B-Picture Delta QP",                   OFFSET(b_frame_delta_qp),   AV_OPT_TYPE_INT,  { .i64 = 4 }, -10, 10, VE },
 -    { "bf_ref",         "Enable Reference to B-Frames",         OFFSET(b_frame_ref),        AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, VE },
 +    { "bf_ref",         "Enable Reference to B-Frames",         OFFSET(b_frame_ref),        AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, VE },
      { "bf_ref_delta_qp","Reference B-Picture Delta QP",         OFFSET(ref_b_frame_delta_qp), AV_OPT_TYPE_INT,  { .i64 = 4 }, -10, 10, VE },
  
      /// Intra-Refresh
      { "cavlc",          "Context Adaptive Variable-Length Coding", 0,                  AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_CALV },      0, 0, VE, "coder" },
      { "cabac",          "Context Adaptive Binary Arithmetic Coding", 0,                AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_CABAC },     0, 0, VE, "coder" },
  
 -    { "me_half_pel",    "Enable ME Half Pixel",                 OFFSET(me_half_pel),   AV_OPT_TYPE_INT,  { .i64 = 1 }, 0, 1, VE },
 -    { "me_quarter_pel", "Enable ME Quarter Pixel",              OFFSET(me_quarter_pel),AV_OPT_TYPE_INT,  { .i64 = 1 }, 0, 1, VE },
 +    { "me_half_pel",    "Enable ME Half Pixel",                 OFFSET(me_half_pel),   AV_OPT_TYPE_BOOL,  { .i64 = 1 }, 0, 1, VE },
 +    { "me_quarter_pel", "Enable ME Quarter Pixel",              OFFSET(me_quarter_pel),AV_OPT_TYPE_BOOL,  { .i64 = 1 }, 0, 1, VE },
  
 -    { "aud",            "Inserts AU Delimiter NAL unit",        OFFSET(aud)          ,AV_OPT_TYPE_INT,  { .i64 = 0 }, 0, 1, VE },
 +    { "aud",            "Inserts AU Delimiter NAL unit",        OFFSET(aud)          ,AV_OPT_TYPE_BOOL,  { .i64 = 0 }, 0, 1, VE },
  
 -    AMF_COMMON_OPTIONS,
 +    { "log_to_dbg",     "Enable AMF logging to debug output",   OFFSET(log_to_dbg)    , AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE },
  
      { NULL }
  };
@@@ -213,6 -217,7 +213,6 @@@ static av_cold int amf_encode_init_h264
          }
      }
  
 -
      if (ctx->rate_control_mode == AMF_VIDEO_ENCODER_RATE_CONTROL_METHOD_CONSTANT_QP) {
          AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_RATE_CONTROL_PREANALYSIS_ENABLE, AMF_VIDEO_ENCODER_PREENCODE_DISABLED);
          if (ctx->preanalysis)
  static const AVCodecDefault defaults[] = {
      { "refs",       "-1"  },
      { "aspect",     "0"   },
-     { "sar",        "0"   },
      { "qmin",       "-1"  },
      { "qmax",       "-1"  },
      { "b",          "2M"  },
@@@ -376,7 -380,7 +375,7 @@@ static const AVClass h264_amf_class = 
      .option = options,
      .version = LIBAVUTIL_VERSION_INT,
  };
- //TODO declare as HW encoder when available
  AVCodec ff_h264_amf_encoder = {
      .name           = "h264_amf",
      .long_name      = NULL_IF_CONFIG_SMALL("AMD AMF H.264 Encoder"),
      .priv_data_size = sizeof(AmfContext),
      .priv_class     = &h264_amf_class,
      .defaults       = defaults,
-     .capabilities   = AV_CODEC_CAP_DELAY,
+     .capabilities   = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE,
      .caps_internal  = FF_CODEC_CAP_INIT_CLEANUP,
      .pix_fmts       = ff_amf_pix_fmts,
+     .wrapper_name   = "amf",
  };
diff --combined libavcodec/amfenc_hevc.c
@@@ -1,21 -1,26 +1,21 @@@
  /*
 - * AMD AMF support
 - * Copyright (C) 2017 Luca Barbato
 - * Copyright (C) 2017 Mikhail Mironov <mikhail.mironov@amd.com>
 + * This file is part of FFmpeg.
   *
 - * This file is part of Libav.
 - *
 - * Libav is free software; you can redistribute it and/or
 + * FFmpeg is free software; you can redistribute it and/or
   * modify it under the terms of the GNU Lesser General Public
   * License as published by the Free Software Foundation; either
   * version 2.1 of the License, or (at your option) any later version.
   *
 - * Libav is distributed in the hope that it will be useful,
 + * FFmpeg is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   * Lesser General Public License for more details.
   *
   * You should have received a copy of the GNU Lesser General Public
 - * License along with Libav; if not, write to the Free Software
 + * License along with FFmpeg; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
   */
  
 -
  #include "libavutil/internal.h"
  #include "libavutil/opt.h"
  #include "amfenc.h"
@@@ -53,10 -58,10 +53,10 @@@ static const AVOption options[] = 
      { "6.1",            "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_LEVEL_6_1 }, 0, 0, VE, "level" },
      { "6.2",            "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_LEVEL_6_2 }, 0, 0, VE, "level" },
  
 -    { "quality_preset",        "Set the encoding quality",                 OFFSET(quality),      AV_OPT_TYPE_INT,   { .i64 = AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET_SPEED }, AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET_QUALITY, AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET_SPEED, VE, "quality_preset" },
 -    { "balanced",       "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET_BALANCED }, 0, 0, VE, "quality_preset" },
 -    { "speed",          "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET_SPEED    }, 0, 0, VE, "quality_preset" },
 -    { "quality",        "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET_QUALITY  }, 0, 0, VE, "quality_preset" },
 +    { "quality",        "Set the encoding quality",                 OFFSET(quality),      AV_OPT_TYPE_INT,   { .i64 = AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET_SPEED }, AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET_QUALITY, AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET_SPEED, VE, "quality" },
 +    { "balanced",       "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET_BALANCED }, 0, 0, VE, "quality" },
 +    { "speed",          "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET_SPEED    }, 0, 0, VE, "quality" },
 +    { "quality",        "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET_QUALITY  }, 0, 0, VE, "quality" },
  
      { "rc",             "Set the rate control mode",            OFFSET(rate_control_mode), AV_OPT_TYPE_INT, { .i64 = AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_UNKNOWN }, AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_UNKNOWN, AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_CBR, VE, "rc" },
      { "cqp",            "Constant Quantization Parameter",      0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_CONSTANT_QP             }, 0, 0, VE, "rc" },
      { "idr",            "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_HEVC_HEADER_INSERTION_MODE_IDR_ALIGNED }, 0, 0, VE, "hdrmode" },
  
      { "gops_per_idr",    "GOPs per IDR 0-no IDR will be inserted",  OFFSET(gops_per_idr),  AV_OPT_TYPE_INT,  { .i64 = 60 },  0, INT_MAX, VE },
 -    { "preanalysis",    "Enable preanalysis",                       OFFSET(preanalysis),   AV_OPT_TYPE_INT, { .i64 = 0  },  0, 1, VE},
 -    { "vbaq",           "Enable VBAQ",                              OFFSET(enable_vbaq),   AV_OPT_TYPE_INT, { .i64 = 0  },  0, 1, VE},
 -    { "enforce_hrd",    "Enforce HRD",                              OFFSET(enforce_hrd),   AV_OPT_TYPE_INT, { .i64 = 0  },  0, 1, VE},
 -    { "filler_data",    "Filler Data Enable",                       OFFSET(filler_data),   AV_OPT_TYPE_INT, { .i64 = 0  },  0, 1, VE},
 +    { "preanalysis",    "Enable preanalysis",                       OFFSET(preanalysis),   AV_OPT_TYPE_BOOL, { .i64 = 0  },  0, 1, VE},
 +    { "vbaq",           "Enable VBAQ",                              OFFSET(enable_vbaq),   AV_OPT_TYPE_BOOL, { .i64 = 0  },  0, 1, VE},
 +    { "enforce_hrd",    "Enforce HRD",                              OFFSET(enforce_hrd),   AV_OPT_TYPE_BOOL, { .i64 = 0  },  0, 1, VE},
 +    { "filler_data",    "Filler Data Enable",                       OFFSET(filler_data),   AV_OPT_TYPE_BOOL, { .i64 = 0  },  0, 1, VE},
      { "max_au_size",    "Maximum Access Unit Size for rate control (in bits)", OFFSET(max_au_size),   AV_OPT_TYPE_INT,{ .i64 = 0 }, 0, INT_MAX, VE},
      { "min_qp_i",       "min quantization parameter for I-frame",   OFFSET(min_qp_i),      AV_OPT_TYPE_INT, { .i64 = -1  }, -1, 51, VE },
      { "max_qp_i",       "max quantization parameter for I-frame",   OFFSET(max_qp_i),      AV_OPT_TYPE_INT, { .i64 = -1  }, -1, 51, VE },
      { "max_qp_p",       "max quantization parameter for P-frame",   OFFSET(max_qp_p),      AV_OPT_TYPE_INT, { .i64 = -1  }, -1, 51, VE },
      { "qp_p",           "quantization parameter for P-frame",       OFFSET(qp_p),          AV_OPT_TYPE_INT, { .i64 = -1  }, -1, 51, VE },
      { "qp_i",           "quantization parameter for I-frame",       OFFSET(qp_i),          AV_OPT_TYPE_INT, { .i64 = -1  }, -1, 51, VE },
 -    { "skip_frame",     "Rate Control Based Frame Skip",            OFFSET(skip_frame),    AV_OPT_TYPE_INT,{ .i64 = 0   },  0, 1, VE },
 -    { "me_half_pel",    "Enable ME Half Pixel",                     OFFSET(me_half_pel),   AV_OPT_TYPE_INT,{ .i64 = 1   },  0, 1, VE },
 -    { "me_quarter_pel", "Enable ME Quarter Pixel ",                 OFFSET(me_quarter_pel),AV_OPT_TYPE_INT,{ .i64 = 1   },  0, 1, VE },
 -
 -    { "aud",            "Inserts AU Delimiter NAL unit",            OFFSET(aud)           ,AV_OPT_TYPE_INT,{ .i64 = 0 }, 0, 1, VE },
 +    { "skip_frame",     "Rate Control Based Frame Skip",            OFFSET(skip_frame),    AV_OPT_TYPE_BOOL,{ .i64 = 0   },  0, 1, VE },
 +    { "me_half_pel",    "Enable ME Half Pixel",                     OFFSET(me_half_pel),   AV_OPT_TYPE_BOOL,{ .i64 = 1   },  0, 1, VE },
 +    { "me_quarter_pel", "Enable ME Quarter Pixel ",                 OFFSET(me_quarter_pel),AV_OPT_TYPE_BOOL,{ .i64 = 1   },  0, 1, VE },
  
 -    AMF_COMMON_OPTIONS,
 +    { "aud",            "Inserts AU Delimiter NAL unit",            OFFSET(aud)           ,AV_OPT_TYPE_BOOL,{ .i64 = 0 }, 0, 1, VE },
  
 +    { "log_to_dbg",     "Enable AMF logging to debug output",   OFFSET(log_to_dbg), AV_OPT_TYPE_BOOL,{ .i64 = 0 }, 0, 1, VE },
      { NULL }
  };
  
@@@ -295,7 -301,6 +295,6 @@@ static av_cold int amf_encode_init_hevc
  static const AVCodecDefault defaults[] = {
      { "refs",       "-1"  },
      { "aspect",     "0"   },
-     { "sar",        "0"   },
      { "b",          "2M"  },
      { "g",          "250" },
      { "slices",     "1"   },
@@@ -307,7 -312,7 +306,7 @@@ static const AVClass hevc_amf_class = 
      .option = options,
      .version = LIBAVUTIL_VERSION_INT,
  };
- //TODO declare as HW encoder when available
  AVCodec ff_hevc_amf_encoder = {
      .name           = "hevc_amf",
      .long_name      = NULL_IF_CONFIG_SMALL("AMD AMF HEVC encoder"),
      .priv_data_size = sizeof(AmfContext),
      .priv_class     = &hevc_amf_class,
      .defaults       = defaults,
-     .capabilities   = AV_CODEC_CAP_DELAY,
+     .capabilities   = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE,
      .caps_internal  = FF_CODEC_CAP_INIT_CLEANUP,
      .pix_fmts       = ff_amf_pix_fmts,
+     .wrapper_name   = "amf",
  };