\input texinfo @c -*- texinfo -*-

@settitle General Documentation
@titlepage
@sp 7
@center @titlefont{General Documentation}
@sp 3
@end titlepage


@chapter external libraries

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 @file{./configure}.

@section AMR

AMR comes in two different flavors, wideband and narrowband. FFmpeg can make
use of the AMR wideband (floating-point mode) and the AMR narrowband
(floating-point mode) reference decoders and encoders (libamr) as well as
the OpenCORE libraries for AMR-NB decoding/encoding and AMR-WB decoding.

@subsection OpenCORE

Go to @url{http://gitorious.org/opencore-amr/} and follow the instructions for
installing the libraries. Then pass @code{--enable-libopencore-amrnb} and/or
@code{--enable-libopencore-amrwb} to configure to enable the libraries.

Note that OpenCORE is 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 FFmpeg's license to LGPL version 3 (or if you have enabled
GPL components, GPL version 3) to use it.

@subsection libamr

Go to @url{http://www.penguin.cz/~utx/amr} and follow the instructions for
installing the libraries. Then pass @code{--enable-libamr-nb} and/or
@code{--enable-libamr-wb} to configure to enable the libraries.

Note that libamr is copyrighted without any sort of license grant. This means
that you can use it if you legally obtained it but you are not allowed to
redistribute it in any way. @strong{Any FFmpeg binaries with libamr support
you create are non-free and unredistributable!}


@chapter Supported File Formats and Codecs

You can use the @code{-formats} option to have an exhaustive list.

@section File Formats

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 4xm                       @tab   @tab X
    @tab 4X Technologies format, used in some games.
@item Audio IFF (AIFF)          @tab X @tab X
@item American Laser Games MM   @tab   @tab X
    @tab Multimedia format used in games like Mad Dog McCree.
@item 3GPP AMR                  @tab X @tab X
@item ASF                       @tab X @tab X
@item AVI                       @tab X @tab X
@item AVISynth                  @tab   @tab X
@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 Brute Force & Ignorance   @tab   @tab X
    @tab Used in the game Flash Traffic: City of Angels.
@item Interplay C93             @tab   @tab X
    @tab Used in the game Cyberia from Interplay.
@item Delphine Software International CIN @tab   @tab X
    @tab Multimedia format used by Delphine Software games.
@item CRC testing format        @tab X @tab
@item Creative Voice            @tab X @tab X
    @tab Created for the Sound Blaster Pro.
@item CRYO APC                  @tab   @tab X
    @tab Audio format used in some games by CRYO Interactive Entertainment.
@item D-Cinema audio            @tab X @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
         game and different game cutscenes repacked for use with ScummVM.
@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 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 FLI/FLC/FLX animation     @tab   @tab X
    @tab .fli/.flc files
@item Flash Video (FLV)         @tab   @tab X
    @tab Macromedia Flash video files
@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 GXF                       @tab X @tab X
    @tab General eXchange Format SMPTE 360M, used by Thomson Grass Valley
         playout servers.
@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.
@item IFF                       @tab   @tab X
    @tab Interchange File Format
@item Interplay MVE             @tab   @tab X
    @tab Format used in various Interplay computer games.
@item LMLM4                     @tab   @tab X
    @tab Used by Linux Media Labs MPEG-4 PCI boards
@item Matroska                  @tab X @tab X
@item Matroska audio            @tab X @tab
@item MAXIS XA                  @tab   @tab X
    @tab Used in Sim City 3000; file extension .xa.
@item Monkey's Audio            @tab   @tab X
@item Motion Pixels MVI         @tab   @tab X
@item MOV/QuickTime/MP4         @tab X @tab X
    @tab 3GP, 3GP2, PSP, iPod variants supported
@item MP2                       @tab X @tab X
@item MP3                       @tab X @tab X
@item MPEG-1 System             @tab X @tab X
    @tab muxed audio and video, VCD format supported
@item MPEG-PS (program stream)  @tab X @tab X
    @tab also known as @code{VOB} file, SVCD and DVD format supported
@item MPEG-TS (transport stream) @tab X @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 MIME multipart JPEG       @tab X @tab
@item MSN TCP webcam            @tab   @tab X
    @tab Used by MSN Messenger webcam streams.
@item MTV                       @tab   @tab X
@item Musepack                  @tab   @tab X
@item Musepack SV8              @tab   @tab X
@item Material eXchange Format (MXF) @tab X @tab X
    @tab SMPTE 377M, used by D-Cinema, broadcast industry.
@item Material eXchange Format (MXF), D-10 Mapping @tab X @tab X
    @tab SMPTE 386M, D-10/IMX Mapping.
@item NC camera feed            @tab   @tab X
    @tab NC (AVIP NC4600) camera streams
@item Nullsoft Streaming Video  @tab   @tab X
@item NuppelVideo               @tab   @tab X
@item NUT                       @tab X @tab X
    @tab NUT Open Container Format
@item Ogg                       @tab X @tab X
@item TechnoTrend PVA           @tab   @tab X
    @tab Used by TechnoTrend DVB PCI boards.
@item raw ADTS (AAC)            @tab X @tab X
@item raw AC-3                  @tab X @tab X
@item raw Chinese AVS video     @tab   @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 E-AC-3                @tab X @tab X
@item raw FLAC                  @tab X @tab X
@item raw GSM                   @tab   @tab X
@item raw H.261                 @tab X @tab X
@item raw H.263                 @tab X @tab X
@item raw H.264                 @tab X @tab X
@item raw Ingenient MJPEG       @tab   @tab X
@item raw MJPEG                 @tab X @tab X
@item raw MLP                   @tab   @tab X
@item raw MPEG                  @tab   @tab X
@item raw MPEG-1                @tab   @tab X
@item raw MPEG-2                @tab   @tab X
@item raw MPEG-4                @tab X @tab X
@item raw NULL                  @tab X @tab
@item raw video                 @tab X @tab X
@item raw id RoQ                @tab X @tab
@item raw Shorten               @tab   @tab X
@item raw VC-1                  @tab   @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 16 bit big-endian  @tab X @tab X
@item raw PCM signed 16 bit little-endian  @tab X @tab X
@item raw PCM signed 24 bit big-endian  @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 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 big-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 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
@item raw PCM floating-point 64 bit little-endian  @tab X @tab X
@item RDT                       @tab   @tab X
@item REDCODE R3D               @tab   @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 Renderware TeXture Dictionary @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 RTP                       @tab   @tab X
@item RTSP                      @tab   @tab X
@item SDP                       @tab   @tab X
@item Sega FILM/CPK             @tab   @tab X
    @tab Used in many Sega Saturn console games.
@item Sierra SOL                @tab   @tab X
    @tab .sol files used in Sierra Online games.
@item Sierra VMD                @tab   @tab X
    @tab Used in Sierra CD-ROM games.
@item Smacker                   @tab   @tab X
    @tab Multimedia format used by many games.
@item Sony OpenMG (OMA)         @tab   @tab X
    @tab Audio format used in Sony Sonic Stage and Sony Vegas.
@item Sony PlayStation STR      @tab   @tab X
@item SUN AU format             @tab X @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 VC-1 test bitstream       @tab X @tab X
@item WAV                       @tab X @tab X
@item WavPack                   @tab   @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 YUV4MPEG pipe             @tab X @tab X
@end multitable

@code{X} means that encoding (resp. decoding) is supported.

@section Image Formats

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 Name @tab Encoding @tab Decoding @tab Comments
@item .Y.U.V       @tab X @tab X
    @tab one raw file per component
@item animated GIF @tab X @tab X
    @tab Only uncompressed GIFs are generated.
@item BMP          @tab X @tab X
    @tab Microsoft BMP image
@item JPEG         @tab X @tab X
    @tab Progressive JPEG is not supported.
@item JPEG 2000    @tab   @tab E
    @tab decoding supported through external library libopenjpeg
@item JPEG-LS      @tab X @tab X
@item LJPEG        @tab X @tab
    @tab Lossless JPEG
@item PAM          @tab X @tab X
    @tab PAM is a PNM extension with alpha support.
@item PBM          @tab X @tab X
    @tab Portable BitMap image
@item PCX          @tab   @tab X
    @tab PC Paintbrush
@item PGM          @tab X @tab X
    @tab Portable GrayMap image
@item PGMYUV       @tab X @tab X
    @tab PGM with U and V components in YUV 4:2:0
@item PNG          @tab X @tab X
    @tab 2/4 bpp not supported yet
@item PPM          @tab X @tab X
    @tab Portable PixelMap image
@item PTX          @tab   @tab X
    @tab V.Flash PTX format
@item SGI          @tab X @tab X
    @tab SGI RGB image format
@item Sun Rasterfile  @tab   @tab X
    @tab Sun RAS image format
@item TIFF         @tab X @tab X
    @tab YUV, JPEG and some extension is not supported yet.
@item Truevision Targa  @tab X @tab X
    @tab Targa (.TGA) image format
@end multitable

@code{X} means that encoding (resp. decoding) is supported.

@code{E} means that support is provided through an external library.

@section Video Codecs

@multitable @columnfractions .4 .1 .1 .4
@item Name @tab Encoding @tab Decoding @tab Comments
@item 4X Movie               @tab     @tab  X
    @tab Used in certain computer games.
@item 8SVX exponential       @tab     @tab  X
@item 8SVX fibonacci         @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
    @tab Used in Chinese MP3 players.
@item Apple MJPEG-B          @tab     @tab  X
@item Apple QuickDraw        @tab     @tab  X
    @tab fourcc: qdrw
@item Asus v1                @tab  X  @tab  X
    @tab fourcc: ASV1
@item Asus v2                @tab  X  @tab  X
    @tab fourcc: ASV2
@item ATI VCR1               @tab     @tab  X
    @tab fourcc: VCR1
@item ATI VCR2               @tab     @tab  X
    @tab fourcc: VCR2
@item Autodesk Animator Flic video  @tab     @tab  X
@item Autodesk RLE           @tab     @tab  X
    @tab fourcc: AASC
@item AVS (Audio Video Standard) video  @tab     @tab  X
    @tab Video encoding used by the Creature Shock game.
@item Beam Software VB       @tab     @tab  X
@item Bethesda VID video     @tab     @tab  X
    @tab Used in some games from Bethesda Softworks.
@item Brute Force & Ignorance   @tab   @tab X
    @tab Used in the game Flash Traffic: City of Angels.
@item C93 video              @tab     @tab  X
    @tab Codec used in Cyberia game.
@item CamStudio              @tab     @tab  X
    @tab fourcc: CSCD
@item Chinese AVS video      @tab     @tab  X
    @tab AVS1-P2, JiZhun profile
@item Delphine Software International CIN video  @tab     @tab  X
    @tab Codec used in Delphine Software International games.
@item Cinepak                @tab     @tab  X
@item Cirrus Logic AccuPak   @tab     @tab  X
    @tab fourcc: CLJR
@item Creative YUV (CYUV)    @tab     @tab  X
@item Dirac                  @tab  E  @tab  E
    @tab supported through external libdirac/libschroedinger libraries
@item DNxHD                  @tab   X @tab  X
    @tab aka SMPTE VC3
@item Duck TrueMotion 1.0   @tab     @tab  X
    @tab fourcc: DUCK
@item Duck TrueMotion 2.0    @tab     @tab  X
    @tab fourcc: TM20
@item DV (Digital Video)     @tab  X  @tab  X
@item Feeble Files/ScummVM DXA  @tab     @tab  X
    @tab Codec originally used in Feeble Files game.
@item Electronic Arts CMV video  @tab     @tab  X
    @tab Used in NHL 95 game.
@item Electronic Arts TGV video  @tab     @tab  X
@item Electronic Arts TGQ video  @tab     @tab  X
@item Electronic Arts TQI video  @tab     @tab  X
@item Escape 124             @tab     @tab  X
@item FFmpeg codec #1        @tab  X  @tab  X
    @tab experimental lossless codec (fourcc: FFV1)
@item Flash Screen Video v1  @tab  X  @tab  X
    @tab fourcc: FSV1
@item Flash Video (FLV)      @tab  X  @tab  X
    @tab Sorenson H.263 used in Flash
@item Fraps                  @tab     @tab  X
@item H.261                  @tab  X  @tab  X
@item H.263 / H.263-1996     @tab  X  @tab  X
@item H.263+ / H.263-1998 / H.263 version 2  @tab  X  @tab  X
@item H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10  @tab  E  @tab  X
    @tab encoding supported through external library libx264
@item H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (VDPAU acceleration)  @tab  E  @tab  X
@item HuffYUV                @tab  X  @tab  X
@item HuffYUV FFmpeg variant @tab  X  @tab  X
@item IBM Ultimotion         @tab     @tab  X
    @tab fourcc: ULTI
@item id Cinematic video     @tab     @tab  X
    @tab Used in Quake II.
@item id RoQ video           @tab  X  @tab  X
    @tab Used in Quake III, Jedi Knight 2, other computer games.
@item Intel H.263            @tab     @tab  X
@item Intel Indeo 2          @tab     @tab  X
@item Intel Indeo 3          @tab     @tab  X
@item Interplay C93          @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 Karl Morton's video codec  @tab     @tab  X
    @tab Codec used in Worms games.
@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 lossless MJPEG         @tab  X  @tab  X
@item Microsoft RLE          @tab     @tab  X
@item Microsoft Video 1      @tab     @tab  X
@item Mimic                  @tab     @tab  X
    @tab Used in MSN Messenger Webcam streams.
@item Miro VideoXL           @tab     @tab  X
    @tab fourcc: VIXL
@item MJPEG (Motion JPEG)    @tab  X  @tab  X
@item Motion Pixels video    @tab     @tab  X
@item MPEG-1 video           @tab  X  @tab  X
@item MPEG-1/2 video XvMC (X-Video Motion Compensation)  @tab     @tab  X
@item MPEG-1/2 video (VDPAU acceleration)  @tab     @tab  X
@item MPEG-2 video           @tab  X  @tab  X
@item MPEG-4 part 2          @tab  X  @tab  X
    @ libxvidcore can be used alternatively for encoding.
@item MPEG-4 part 2 Microsoft variant version 1  @tab  X  @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 Nintendo Gamecube THP video  @tab     @tab  X
@item NuppelVideo/RTjpeg     @tab     @tab  X
    @tab Video encoding used in NuppelVideo files.
@item On2 VP3                @tab     @tab  X
    @tab still experimental
@item On2 VP5                @tab     @tab  X
    @tab fourcc: VP50
@item On2 VP6                @tab     @tab  X
    @tab fourcc: VP60,VP61,VP62
@item planar RGB             @tab     @tab  X
    @tab fourcc: 8BPS
@item Q-team QPEG            @tab     @tab  X
    @tab fourccs: QPEG, Q1.0, Q1.1
@item QuickTime 8BPS video   @tab     @tab  X
@item QuickTime Animation (RLE) video  @tab  X  @tab  X
    @tab fourcc: 'rle '
@item QuickTime Graphics (SMC)  @tab     @tab  X
    @tab fourcc: 'smc '
@item QuickTime video (RPZA) @tab     @tab  X
    @tab fourcc: rpza
@item Raw Video              @tab  X  @tab  X
@item RealVideo 1.0          @tab  X  @tab  X
@item RealVideo 2.0          @tab  X  @tab  X
@item RealVideo 3.0          @tab     @tab  X
    @tab still far from ideal
@item RealVideo 4.0          @tab     @tab  X
@item Renderware TXD (TeXture Dictionary)  @tab     @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 Sierra VMD video       @tab     @tab  X
    @tab Used in Sierra VMD files.
@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
@item Sorenson Vector Quantizer 3  @tab     @tab  X
    @tab fourcc: SVQ3
@item Sunplus JPEG (SP5X)    @tab     @tab  X
    @tab fourcc: SP5X
@item TechSmith Screen Capture Codec  @tab     @tab  X
    @tab fourcc: TSCC
@item Theora                 @tab  E  @tab  X
    @tab encoding supported through external library libtheora
@item Tiertex Limited SEQ video  @tab     @tab  X
    @tab Codec used in DOS CD-ROM FlashBack game.
@item VMware Screen Codec / VMware Video  @tab     @tab  X
    @tab Codec used in videos captured by VMware.
@item Westwood Studios VQA (Vector Quantized Animation) video  @tab     @tab  X
@item Windows Media Video 7  @tab  X  @tab  X
@item Windows Media Video 8  @tab  X  @tab  X
@item Windows Media Video 9  @tab     @tab  X
    @tab not completely working
@item Wing Commander III / Xan  @tab     @tab  X
    @tab Used in Wing Commander III .MVE files.
@item Winnov WNV1            @tab     @tab  X
@item WMV7                   @tab  X  @tab  X
@item YAMAHA SMAF            @tab  X  @tab  X
@item ZLIB                   @tab  X  @tab  X
    @tab part of LCL, encoder experimental
@item Zip Motion Blocks Video  @tab   X @tab  X
    @tab Encoder works only in PAL8.
@end multitable

@code{X} means that encoding (resp. decoding) is supported.

@code{E} means that support is provided through an external library.

@section Audio Codecs

@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
@item AC-3                   @tab IX  @tab  X
@item ADPCM 4X Movie         @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 Electronic Arts  @tab     @tab  X
    @tab Used in various EA titles.
@item ADPCM Electronic Arts Maxis CDROM XS  @tab     @tab  X
    @tab Used in Sim City 3000.
@item ADPCM Electronic Arts R1  @tab     @tab  X
@item ADPCM Electronic Arts R2  @tab     @tab  X
@item ADPCM Electronic Arts R3  @tab     @tab  X
@item ADPCM Electronic Arts XAS @tab     @tab  X
@item ADPCM G.726            @tab  X  @tab  X
@item ADPCM IMA AMV          @tab     @tab  X
    @tab Used in AMV files
@item ADPCM IMA Electronic Arts EACS  @tab     @tab  X
@item ADPCM IMA Electronic Arts SEAD  @tab     @tab  X
@item ADPCM IMA Funcom       @tab     @tab  X
@item ADPCM IMA QuickTime    @tab  X  @tab  X
@item ADPCM IMA Loki SDL MJPEG  @tab     @tab  X
@item ADPCM IMA WAV          @tab  X  @tab  X
@item ADPCM IMA Westwood     @tab     @tab  X
@item ADPCM ISS IMA          @tab     @tab  X
    @tab Used in FunCom games.
@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 Microsoft        @tab  X  @tab  X
@item ADPCM MS IMA           @tab  X  @tab  X
@item ADPCM Nintendo Gamecube THP  @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 Westwood Studios IMA @tab     @tab  X
    @tab Used in Westwood Studios games like Command and Conquer.
@item ADPCM Yamaha           @tab  X  @tab  X
@item AMR-NB                 @tab  E  @tab  E
    @tab supported through external libraries libamrnb and libopencore-amrnb
@item AMR-WB                 @tab  E  @tab  E
    @tab decoding supported through external libraries libamrwb and libopencore-amrwb,
         encoding supported through external library libamrwb
@item Apple lossless audio   @tab  X  @tab  X
    @tab QuickTime fourcc 'alac'
@item Atrac 3                @tab     @tab  X
@item Delphine Software International CIN audio  @tab     @tab  X
    @tab Codec used in Delphine Software International games.
@item COOK                   @tab     @tab  X
    @tab All versions except 5.1 are supported.
@item DCA (DTS Coherent Acoustics)  @tab     @tab  X
@item DPCM id RoQ            @tab  X  @tab  X
    @tab Used in Quake III, Jedi Knight 2, other computer games.
@item DPCM Interplay         @tab     @tab  X
    @tab Used in various Interplay computer 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
@item DSP Group TrueSpeech   @tab     @tab  X
@item DV audio               @tab     @tab  X
@item Enhanced AC-3          @tab     @tab  X
@item FLAC (Free Lossless Audio Codec)  @tab  X  @tab  IX
@item G.729                  @tab     @tab  X
@item GSM                    @tab  E  @tab  E
    @tab supported through external library libgsm
@item GSM Microsoft variant  @tab  E  @tab  E
    @tab supported through external library libgsm
@item IMC (Intel Music Coder)  @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)/TrueHD  @tab     @tab  X
    @tab Used in DVD-Audio and Blu-Ray 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 IX  @tab IX
@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 SV7           @tab     @tab  X
@item Musepack SV8           @tab     @tab  X
@item Nellymoser Asao        @tab  X  @tab  X
@item PCM A-law              @tab  X  @tab  X
@item PCM mu-law             @tab  X  @tab  X
@item PCM 16-bit little-endian planar  @tab     @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 64-bit floating point little-endian  @tab  X  @tab  X
@item PCM D-Cinema audio signed 24-bit   @tab  X  @tab  X
@item PCM signed 8-bit       @tab  X  @tab  X
@item PCM signed 16-bit big-endian  @tab  X  @tab  X
@item PCM signed 16-bit little-endian  @tab  X  @tab  X
@item PCM signed 24-bit big-endian  @tab  X  @tab  X
@item PCM signed 24-bit little-endian  @tab  X  @tab  X
@item PCM signed 32-bit big-endian  @tab  X  @tab  X
@item PCM signed 32-bit little-endian  @tab  X  @tab  X
@item PCM unsigned 8-bit     @tab  X  @tab  X
@item PCM unsigned 16-bit big-endian  @tab  X  @tab  X
@item PCM unsigned 16-bit little-endian  @tab  X  @tab  X
@item PCM unsigned 24-bit big-endian  @tab  X  @tab  X
@item PCM unsigned 24-bit little-endian  @tab  X  @tab  X
@item PCM unsigned 32-bit big-endian  @tab  X  @tab  X
@item PCM unsigned 32-bit little-endian  @tab  X  @tab  X
@item PCM Zork               @tab  X  @tab  X
@item QCELP / PureVoice      @tab     @tab  X
@item QDesign Music Codec 2  @tab     @tab  X
    @tab There are still some distortions.
@item RealAudio 1.0 (14.4K)  @tab     @tab  X
    @tab Real 14400 bit/s codec
@item RealAudio 2.0 (28.8K)  @tab     @tab  X
    @tab Real 28800 bit/s codec
@item RealAudio 3.0 (dnet)   @tab IX  @tab  X
    @tab Real low bitrate AC-3 codec
@item Shorten                @tab     @tab  X
@item Sierra VMD audio       @tab     @tab  X
    @tab Used in Sierra VMD files.
@item Smacker audio          @tab     @tab  X
@item Sonic                  @tab  X  @tab  X
    @tab experimental codec
@item Sonic lossless         @tab  X  @tab  X
    @tab experimental codec
@item Speex                  @tab     @tab  E
    @tab supported through external library libspeex
@item True Audio (TTA)       @tab     @tab  X
@item Vorbis                 @tab  E  @tab  X
    @ A native but very primitive encoder exists.
@item WavPack                @tab     @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
    @tab Used in Origin's Wing Commander IV AVI files.
@end multitable

@code{X} means that encoding (resp. decoding) is supported.

@code{E} means that support is provided through an external library.

@code{I} means that an integer-only version is available, too (ensures high
performance on systems without hardware floating point support).

@section Subtitle Formats

@multitable @columnfractions .4 .1 .1 .1 .1 .1
@item Name @tab Muxing @tab Demuxing @tab Encoding @tab Decoding
@item SSA/ASS      @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 XSUB         @tab   @tab   @tab   @tab X
@end multitable

@code{X} means that the feature is supported.

@section Network Protocols

@multitable @columnfractions .4 .1 .1 .1 .1 .1
@item Name         @tab Support
@item file         @tab X
@item Gopher       @tab X
@item HTTP         @tab X
@item pipe         @tab X
@item RTP          @tab X
@item TCP          @tab X
@item UDP          @tab X
@end multitable

@code{X} means that the protocol is supported.


@chapter Platform Specific information

@section BSD

BSD make will not build FFmpeg, you need to install and use GNU Make
(@file{gmake}).

@section Windows

To get help and instructions for building FFmpeg under Windows, check out
the FFmpeg Windows Help Forum at
@url{http://ffmpeg.arrozcru.org/}.

@subsection Native Windows compilation

FFmpeg can be built to run natively on Windows using the MinGW tools. Install
the latest versions of MSYS and MinGW from @url{http://www.mingw.org/}.
You can find detailed installation
instructions in the download section and the FAQ.

FFmpeg does not build out-of-the-box with the packages the automated MinGW
installer provides. It also requires coreutils to be installed and many other
packages updated to the latest version. The minimum version for some packages
are listed below:

@itemize
@item bash 3.1
@item msys-make 3.81-2 (note: not mingw32-make)
@item w32api 3.13
@item mingw-runtime 3.15
@end itemize

You will also need to pass @code{-fno-common} to the compiler to work around
a GCC bug (see @url{http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37216}).

Within the MSYS shell, configure and make with:

@example
./configure --enable-memalign-hack --extra-cflags=-fno-common
make
make install
@end example

This will install @file{ffmpeg.exe} along with many other development files
to @file{/usr/local}. You may specify another install path using the
@code{--prefix} option in @file{configure}.

Notes:

@itemize

@item In order to compile vhooks, you must have a POSIX-compliant libdl in
your MinGW system. Get dlfcn-win32 from
@url{http://code.google.com/p/dlfcn-win32}.

@item In order to compile FFplay, you must have the MinGW development library
of SDL. Get it from @url{http://www.libsdl.org}.
Edit the @file{bin/sdl-config} script so that it points to the correct prefix
where SDL was installed. Verify that @file{sdl-config} can be launched from
the MSYS command line.

@item By using @code{./configure --enable-shared} when configuring FFmpeg,
you can build libavutil, libavcodec and libavformat as DLLs.

@end itemize

@subsection Microsoft Visual C++ compatibility

As stated in the FAQ, FFmpeg will not compile under MSVC++. However, if you
want to use the libav* libraries in your own applications, you can still
compile those applications using MSVC++. But the libav* libraries you link
to @emph{must} be built with MinGW. However, you will not be able to debug
inside the libav* libraries, since MSVC++ does not recognize the debug
symbols generated by GCC.
We strongly recommend you to move over from MSVC++ to MinGW tools.

This description of how to use the FFmpeg libraries with MSVC++ is based on
Microsoft Visual C++ 2005 Express Edition. If you have a different version,
you might have to modify the procedures slightly.

@subsubsection Using static libraries

Assuming you have just built and installed FFmpeg in @file{/usr/local}.

@enumerate

@item Create a new console application ("File / New / Project") and then
select "Win32 Console Application". On the appropriate page of the
Application Wizard, uncheck the "Precompiled headers" option.

@item Write the source code for your application, or, for testing, just
copy the code from an existing sample application into the source file
that MSVC++ has already created for you. For example, you can copy
@file{output_example.c} from the FFmpeg distribution.

@item Open the "Project / Properties" dialog box. In the "Configuration"
combo box, select "All Configurations" so that the changes you make will
affect both debug and release builds. In the tree view on the left hand
side, select "C/C++ / General", then edit the "Additional Include
Directories" setting to contain the path where the FFmpeg includes were
installed (i.e. @file{c:\msys\1.0\local\include}).
Do not add MinGW's include directory here, or the include files will
conflict with MSVC's.

@item Still in the "Project / Properties" dialog box, select
"Linker / General" from the tree view and edit the
"Additional Library Directories" setting to contain the @file{lib}
directory where FFmpeg was installed (i.e. @file{c:\msys\1.0\local\lib}),
the directory where MinGW libs are installed (i.e. @file{c:\mingw\lib}),
and the directory where MinGW's GCC libs are installed
(i.e. @file{C:\mingw\lib\gcc\mingw32\4.2.1-sjlj}). Then select
"Linker / Input" from the tree view, and add the files @file{libavformat.a},
@file{libavcodec.a}, @file{libavutil.a}, @file{libmingwex.a},
@file{libgcc.a}, and any other libraries you used (i.e. @file{libz.a})
to the end of "Additional Dependencies".

@item Now, select "C/C++ / Code Generation" from the tree view. Select
"Debug" in the "Configuration" combo box. Make sure that "Runtime
Library" is set to "Multi-threaded Debug DLL". Then, select "Release" in
the "Configuration" combo box and make sure that "Runtime Library" is
set to "Multi-threaded DLL".

@item Click "OK" to close the "Project / Properties" dialog box.

@item MSVC++ lacks some C99 header files that are fundamental for FFmpeg.
Get msinttypes from @url{http://code.google.com/p/msinttypes/downloads/list}
and install it in MSVC++'s include directory
(i.e. @file{C:\Program Files\Microsoft Visual Studio 8\VC\include}).

@item MSVC++ also does not understand the @code{inline} keyword used by
FFmpeg, so you must add this line before @code{#include}ing libav*:
@example
#define inline _inline
@end example

@item Build your application, everything should work.

@end enumerate

@subsubsection Using shared libraries

This is how to create DLL and LIB files that are compatible with MSVC++:

@enumerate

@item Add a call to @file{vcvars32.bat} (which sets up the environment
variables for the Visual C++ tools) as the first line of @file{msys.bat}.
The standard location for @file{vcvars32.bat} is
@file{C:\Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat},
and the standard location for @file{msys.bat} is @file{C:\msys\1.0\msys.bat}.
If this corresponds to your setup, add the following line as the first line
of @file{msys.bat}:

@example
call "C:\Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat"
@end example

Alternatively, you may start the @file{Visual Studio 2005 Command Prompt},
and run @file{c:\msys\1.0\msys.bat} from there.

@item Within the MSYS shell, run @code{lib.exe}. If you get a help message
from @file{Microsoft (R) Library Manager}, this means your environment
variables are set up correctly, the @file{Microsoft (R) Library Manager}
is on the path and will be used by FFmpeg to create
MSVC++-compatible import libraries.

@item Build FFmpeg with

@example
./configure --enable-shared --enable-memalign-hack
make
make install
@end example

Your install path (@file{/usr/local/} by default) should now have the
necessary DLL and LIB files under the @file{bin} directory.

@end enumerate

To use those files with MSVC++, do the same as you would do with
the static libraries, as described above. But in Step 4,
you should only need to add the directory where the LIB files are installed
(i.e. @file{c:\msys\usr\local\bin}). This is not a typo, the LIB files are
installed in the @file{bin} directory. And instead of adding @file{libxx.a}
files, you should add @file{avcodec.lib}, @file{avformat.lib}, and
@file{avutil.lib}. There should be no need for @file{libmingwex.a},
@file{libgcc.a}, and @file{wsock32.lib}, nor any other external library
statically linked into the DLLs. The @file{bin} directory contains a bunch
of DLL files, but the ones that are actually used to run your application
are the ones with a major version number in their filenames
(i.e. @file{avcodec-51.dll}).

@subsection Cross compilation for Windows with Linux

You must use the MinGW cross compilation tools available at
@url{http://www.mingw.org/}.

Then configure FFmpeg with the following options:
@example
./configure --target-os=mingw32 --cross-prefix=i386-mingw32msvc-
@end example
(you can change the cross-prefix according to the prefix chosen for the
MinGW tools).

Then you can easily test FFmpeg with Wine
(@url{http://www.winehq.com/}).

@subsection Compilation under Cygwin

The main issue with the 1.5.x Cygwin versions is that newlib, its C library,
does not contain llrint().  You need to upgrade to the unstable 1.7.x versions,
or leverage the implementation in MinGW (as explained below).

Just install your Cygwin with all the "Base" packages, plus the
following "Devel" ones:
@example
binutils, gcc-core, make, subversion, mingw-runtime, diffutils
@end example

The experimental gcc4 package is still buggy, hence please
use the official gcc 3.4.4 or a 4.2.x compiled from source by yourself.

Install the current binutils-20080624-2 as they work fine (the old
binutils-20060709-1 proved buggy on shared builds).

Then create a small library that just contains llrint():

@example
ar x /usr/lib/mingw/libmingwex.a llrint.o
ar cq /usr/local/lib/libllrint.a llrint.o
@end example

Then run

@example
./configure --enable-static --disable-shared  --extra-ldflags='-L /usr/local/lib' --extra-libs='-l llrint'
@end example

to make a static build or

@example
./configure --enable-shared --disable-static  --extra-ldflags='-L /usr/local/lib' --extra-libs='-l llrint'
@end example

to build shared libraries.

If you want to build FFmpeg with additional libraries, download Cygwin
"Devel" packages for Ogg and Vorbis from any Cygwin packages repository:
@example
libogg-devel, libvorbis-devel
@end example

These library packages are only available from Cygwin Ports
(@url{http://sourceware.org/cygwinports/}) :

@example
yasm, libSDL-devel, libdirac-devel, libfaac-devel, libfaad-devel, libgsm-devel,
libmp3lame-devel, libschroedinger1.0-devel, speex-devel, libtheora-devel,
libxvidcore-devel
@end example

The recommendation for libnut and x264 is to build them from source by
yourself, as they evolve too quickly for Cygwin Ports to be up to date.

Cygwin 1.7.x has IPv6 support. You can add IPv6 to Cygwin 1.5.x by means
of the @code{libgetaddrinfo-devel} package, available at Cygwin Ports.

@subsection Crosscompilation for Windows under Cygwin

With Cygwin you can create Windows binaries that do not need the cygwin1.dll.

Just install your Cygwin as explained before, plus these additional
"Devel" packages:
@example
gcc-mingw-core, mingw-runtime, mingw-zlib
@end example

and add some special flags to your configure invocation.

For a static build run
@example
./configure --target-os=mingw32 --enable-memalign-hack --enable-static --disable-shared --extra-cflags=-mno-cygwin --extra-libs=-mno-cygwin
@end example

and for a build with shared libraries
@example
./configure --target-os=mingw32 --enable-memalign-hack --enable-shared --disable-static --extra-cflags=-mno-cygwin --extra-libs=-mno-cygwin
@end example

@section BeOS

BeOS support is broken in mysterious ways.

@section OS/2

For information about compiling FFmpeg on OS/2 see
@url{http://www.edm2.com/index.php/FFmpeg}.

@chapter Developers Guide

@section API
@itemize @bullet
@item libavcodec is the library containing the codecs (both encoding and
decoding). Look at @file{libavcodec/apiexample.c} to see how to use it.

@item libavformat is the library containing the file format handling (mux and
demux code for several formats). Look at @file{ffplay.c} to use it in a
player. See @file{output_example.c} to use it to generate audio or video
streams.

@end itemize

@section Integrating libavcodec or libavformat in your program

You can integrate all the source code of the libraries to link them
statically to avoid any version problem. All you need is to provide a
'config.mak' and a 'config.h' in the parent directory. See the defines
generated by ./configure to understand what is needed.

You can use libavcodec or libavformat in your commercial program, but
@emph{any patch you make must be published}. The best way to proceed is
to send your patches to the FFmpeg mailing list.

@node Coding Rules
@section Coding Rules

FFmpeg is programmed in the ISO C90 language with a few additional
features from ISO C99, namely:
@itemize @bullet
@item
the @samp{inline} keyword;
@item
@samp{//} comments;
@item
designated struct initializers (@samp{struct s x = @{ .i = 17 @};})
@item
compound literals (@samp{x = (struct s) @{ 17, 23 @};})
@end itemize

These features are supported by all compilers we care about, so we will not
accept patches to remove their use unless they absolutely do not impair
clarity and performance.

All code must compile with GCC 2.95 and GCC 3.3. Currently, FFmpeg also
compiles with several other compilers, such as the Compaq ccc compiler
or Sun Studio 9, and we would like to keep it that way unless it would
be exceedingly involved. To ensure compatibility, please do not use any
additional C99 features or GCC extensions. Especially watch out for:
@itemize @bullet
@item
mixing statements and declarations;
@item
@samp{long long} (use @samp{int64_t} instead);
@item
@samp{__attribute__} not protected by @samp{#ifdef __GNUC__} or similar;
@item
GCC statement expressions (@samp{(x = (@{ int y = 4; y; @})}).
@end itemize

Indent size is 4.
The presentation is the one specified by 'indent -i4 -kr -nut'.
The TAB character is forbidden outside of Makefiles as is any
form of trailing whitespace. Commits containing either will be
rejected by the Subversion repository.

The main priority in FFmpeg is simplicity and small code size in order to
minimize the bug count.

Comments: Use the JavaDoc/Doxygen
format (see examples below) so that code documentation
can be generated automatically. All nontrivial functions should have a comment
above them explaining what the function does, even if it is just one sentence.
All structures and their member variables should be documented, too.
@example
/**
 * @@file mpeg.c
 * MPEG codec.
 * @@author ...
 */

/**
 * Summary sentence.
 * more text ...
 * ...
 */
typedef struct Foobar@{
    int var1; /**< var1 description */
    int var2; ///< var2 description
    /** var3 description */
    int var3;
@} Foobar;

/**
 * Summary sentence.
 * more text ...
 * ...
 * @@param my_parameter description of my_parameter
 * @@return return value description
 */
int myfunc(int my_parameter)
...
@end example

fprintf and printf are forbidden in libavformat and libavcodec,
please use av_log() instead.

Casts should be used only when necessary. Unneeded parentheses
should also be avoided if they don't make the code easier to understand.

@section Development Policy

@enumerate
@item
   Contributions should be licensed under the LGPL 2.1, including an
   "or any later version" clause, or the MIT license.  GPL 2 including
   an "or any later version" clause is also acceptable, but LGPL is
   preferred.
@item
   You must not commit code which breaks FFmpeg! (Meaning unfinished but
   enabled code which breaks compilation or compiles but does not work or
   breaks the regression tests)
   You can commit unfinished stuff (for testing etc), but it must be disabled
   (#ifdef etc) by default so it does not interfere with other developers'
   work.
@item
   You do not have to over-test things. If it works for you, and you think it
   should work for others, then commit. If your code has problems
   (portability, triggers compiler bugs, unusual environment etc) they will be
   reported and eventually fixed.
@item
   Do not commit unrelated changes together, split them into self-contained
   pieces. Also do not forget that if part B depends on part A, but A does not
   depend on B, then A can and should be committed first and separate from B.
   Keeping changes well split into self-contained parts makes reviewing and
   understanding them on the commit log mailing list easier. This also helps
   in case of debugging later on.
   Also if you have doubts about splitting or not splitting, do not hesitate to
   ask/discuss it on the developer mailing list.
@item
   Do not change behavior of the program (renaming options etc) without
   first discussing it on the ffmpeg-devel mailing list. Do not remove
   functionality from the code. Just improve!

   Note: Redundant code can be removed.
@item
   Do not commit changes to the build system (Makefiles, configure script)
   which change behavior, defaults etc, without asking first. The same
   applies to compiler warning fixes, trivial looking fixes and to code
   maintained by other developers. We usually have a reason for doing things
   the way we do. Send your changes as patches to the ffmpeg-devel mailing
   list, and if the code maintainers say OK, you may commit. This does not
   apply to files you wrote and/or maintain.
@item
   We refuse source indentation and other cosmetic changes if they are mixed
   with functional changes, such commits will be rejected and removed. Every
   developer has his own indentation style, you should not change it. Of course
   if you (re)write something, you can use your own style, even though we would
   prefer if the indentation throughout FFmpeg was consistent (Many projects
   force a given indentation style - we do not.). If you really need to make
   indentation changes (try to avoid this), separate them strictly from real
   changes.

   NOTE: If you had to put if()@{ .. @} over a large (> 5 lines) chunk of code,
   then either do NOT change the indentation of the inner part within (do not
   move it to the right)! or do so in a separate commit
@item
   Always fill out the commit log message. Describe in a few lines what you
   changed and why. You can refer to mailing list postings if you fix a
   particular bug. Comments such as "fixed!" or "Changed it." are unacceptable.
@item
   If you apply a patch by someone else, include the name and email address in
   the log message. Since the ffmpeg-cvslog mailing list is publicly
   archived you should add some SPAM protection to the email address. Send an
   answer to ffmpeg-devel (or wherever you got the patch from) saying that
   you applied the patch.
@item
   When applying patches that have been discussed (at length) on the mailing
   list, reference the thread in the log message.
@item
    Do NOT commit to code actively maintained by others without permission.
    Send a patch to ffmpeg-devel instead. If no one answers within a reasonable
    timeframe (12h for build failures and security fixes, 3 days small changes,
    1 week for big patches) then commit your patch if you think it is OK.
    Also note, the maintainer can simply ask for more time to review!
@item
    Subscribe to the ffmpeg-cvslog mailing list. The diffs of all commits
    are sent there and reviewed by all the other developers. Bugs and possible
    improvements or general questions regarding commits are discussed there. We
    expect you to react if problems with your code are uncovered.
@item
    Update the documentation if you change behavior or add features. If you are
    unsure how best to do this, send a patch to ffmpeg-devel, the documentation
    maintainer(s) will review and commit your stuff.
@item
    Try to keep important discussions and requests (also) on the public
    developer mailing list, so that all developers can benefit from them.
@item
    Never write to unallocated memory, never write over the end of arrays,
    always check values read from some untrusted source before using them
    as array index or other risky things.
@item
    Remember to check if you need to bump versions for the specific libav
    parts (libavutil, libavcodec, libavformat) you are changing. You need
    to change the version integer.
    Incrementing the first component means no backward compatibility to
    previous versions (e.g. removal of a function from the public API).
    Incrementing the second component means backward compatible change
    (e.g. addition of a function to the public API or extension of an
    existing data structure).
    Incrementing the third component means a noteworthy binary compatible
    change (e.g. encoder bug fix that matters for the decoder).
@item
    Compiler warnings indicate potential bugs or code with bad style. If a type of
    warning always points to correct and clean code, that warning should
    be disabled, not the code changed.
    Thus the remaining warnings can either be bugs or correct code.
    If it is a bug, the bug has to be fixed. If it is not, the code should
    be changed to not generate a warning unless that causes a slowdown
    or obfuscates the code.
@item
    If you add a new file, give it a proper license header. Do not copy and
    paste it from a random place, use an existing file as template.
@end enumerate

We think our rules are not too hard. If you have comments, contact us.

Note, these rules are mostly borrowed from the MPlayer project.

@section Submitting patches

First, (@pxref{Coding Rules}) above if you did not yet.

When you submit your patch, try to send a unified diff (diff '-up'
option). We cannot read other diffs :-)

Also please do not submit a patch which contains several unrelated changes.
Split it into separate, self-contained pieces. This does not mean splitting
file by file. Instead, make the patch as small as possible while still
keeping it as a logical unit that contains an individual change, even
if it spans multiple files. This makes reviewing your patches much easier
for us and greatly increases your chances of getting your patch applied.

Run the regression tests before submitting a patch so that you can
verify that there are no big problems.

Patches should be posted as base64 encoded attachments (or any other
encoding which ensures that the patch will not be trashed during
transmission) to the ffmpeg-devel mailing list, see
@url{http://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-devel}

It also helps quite a bit if you tell us what the patch does (for example
'replaces lrint by lrintf'), and why (for example '*BSD isn't C99 compliant
and has no lrint()')

Also please if you send several patches, send each patch as a separate mail,
do not attach several unrelated patches to the same mail.

@section New codecs or formats checklist

@enumerate
@item
    Did you use av_cold for codec initialization and close functions?
@item
    Did you add a long_name under NULL_IF_CONFIG_SMALL to the AVCodec or
    AVInputFormat/AVOutputFormat struct?
@item
    Did you bump the minor version number in @file{avcodec.h} or
    @file{avformat.h}?
@item
    Did you register it in @file{allcodecs.c} or @file{allformats.c}?
@item
    Did you add the CodecID to @file{avcodec.h}?
@item
    If it has a fourcc, did you add it to @file{libavformat/riff.c},
    even if it is only a decoder?
@item
    Did you add a rule to compile the appropriate files in the Makefile?
    Remember to do this even if you're just adding a format to a file that is
    already being compiled by some other rule, like a raw demuxer.
@item
    Did you add an entry to the table of supported formats or codecs in the
    documentation?
@item
    Did you add an entry in the Changelog?
@item
    If it depends on a parser or a library, did you add that dependency in
    configure?
@item
    Did you "svn add" the appropriate files before commiting?
@end enumerate

@section patch submission checklist

@enumerate
@item
    Do the regression tests pass with the patch applied?
@item
    Does @code{make checkheaders} pass with the patch applied?
@item
    Is the patch a unified diff?
@item
    Is the patch against latest FFmpeg SVN?
@item
    Are you subscribed to ffmpeg-dev?
    (the list is subscribers only due to spam)
@item
    Have you checked that the changes are minimal, so that the same cannot be
    achieved with a smaller patch and/or simpler final code?
@item
    If the change is to speed critical code, did you benchmark it?
@item
    If you did any benchmarks, did you provide them in the mail?
@item
    Have you checked that the patch does not introduce buffer overflows or
    other security issues?
@item
    Did you test your decoder or demuxer against damaged data? If no, see
    tools/trasher and the noise bitstream filter. Your decoder or demuxer
    should not crash or end in a (near) infinite loop when fed damaged data.
@item
    Is the patch created from the root of the source tree, so it can be
    applied with @code{patch -p0}?
@item
    Does the patch not mix functional and cosmetic changes?
@item
    Did you add tabs or trailing whitespace to the code? Both are forbidden.
@item
    Is the patch attached to the email you send?
@item
    Is the mime type of the patch correct? It should be text/x-diff or
    text/x-patch or at least text/plain and not application/octet-stream.
@item
    If the patch fixes a bug, did you provide a verbose analysis of the bug?
@item
    If the patch fixes a bug, did you provide enough information, including
    a sample, so the bug can be reproduced and the fix can be verified?
    Note please do not attach samples >100k to mails but rather provide a
    URL, you can upload to ftp://upload.ffmpeg.org
@item
    Did you provide a verbose summary about what the patch does change?
@item
    Did you provide a verbose explanation why it changes things like it does?
@item
    Did you provide a verbose summary of the user visible advantages and
    disadvantages if the patch is applied?
@item
    Did you provide an example so we can verify the new feature added by the
    patch easily?
@item
    If you added a new file, did you insert a license header? It should be
    taken from FFmpeg, not randomly copied and pasted from somewhere else.
@item
    You should maintain alphabetical order in alphabetically ordered lists as
    long as doing so does not break API/ABI compatibility.
@item
    Lines with similar content should be aligned vertically when doing so
    improves readability.
@item
    Did you provide a suggestion for a clear commit log message?
@end enumerate

@section Patch review process

All patches posted to ffmpeg-devel will be reviewed, unless they contain a
clear note that the patch is not for SVN.
Reviews and comments will be posted as replies to the patch on the
mailing list. The patch submitter then has to take care of every comment,
that can be by resubmitting a changed patch or by discussion. Resubmitted
patches will themselves be reviewed like any other patch. If at some point
a patch passes review with no comments then it is approved, that can for
simple and small patches happen immediately while large patches will generally
have to be changed and reviewed many times before they are approved.
After a patch is approved it will be committed to the repository.

We will review all submitted patches, but sometimes we are quite busy so
especially for large patches this can take several weeks.

When resubmitting patches, please do not make any significant changes
not related to the comments received during review. Such patches will
be rejected. Instead, submit  significant changes or new features as
separate patches.

@section Regression tests

Before submitting a patch (or committing to the repository), you should at least
test that you did not break anything.

The regression tests build a synthetic video stream and a synthetic
audio stream. These are then encoded and decoded with all codecs or
formats. The CRC (or MD5) of each generated file is recorded in a
result file. A 'diff' is launched to compare the reference results and
the result file.

The regression tests then go on to test the FFserver code with a
limited set of streams. It is important that this step runs correctly
as well.

Run 'make test' to test all the codecs and formats.

Run 'make fulltest' to test all the codecs, formats and FFserver.

[Of course, some patches may change the results of the regression tests. In
this case, the reference results of the regression tests shall be modified
accordingly].

@bye
