OSDN Git Service

Merge commit 'be7c323176e2e5fcf30e3d2ff20975b2f936811b'
authorMichael Niedermayer <michaelni@gmx.at>
Sun, 22 Dec 2013 10:53:41 +0000 (11:53 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 22 Dec 2013 10:53:41 +0000 (11:53 +0100)
* commit 'be7c323176e2e5fcf30e3d2ff20975b2f936811b':
  Add a libwebp encoder

Conflicts:
Changelog
doc/encoders.texi
doc/general.texi
libavcodec/version.h
libavformat/img2enc.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
Changelog
configure
doc/encoders.texi
doc/general.texi
libavcodec/Makefile
libavcodec/allcodecs.c
libavcodec/libwebpenc.c
libavcodec/version.h
libavformat/img2enc.c

diff --cc Changelog
+++ b/Changelog
  Entries are sorted chronologically from oldest to youngest within each release,
  releases are sorted from youngest to oldest.
  
 -version 10:
 -- av_strnstr
 -- support ID3v2 tags in ASF files
 +version <next>
 +
 +- HNM version 4 demuxer and video decoder
 +- Live HDS muxer
 +- setsar/setdar filters now support variables in ratio expressions
 +- elbg filter
 +- string validation in ffprobe
 +- support for decoding through VDPAU in ffmpeg (the -hwaccel option)
 +- complete Voxware MetaSound decoder
 +- remove mp3_header_compress bitstream filter
 +- Windows resource files for shared libraries
 +- aeval filter
 +- stereoscopic 3d metadata handling
++- WebP encoding via libwebp
 +
 +
 +version 2.1:
 +
 +- aecho filter
 +- perspective filter ported from libmpcodecs
 +- ffprobe -show_programs option
 +- compand filter
 +- RTMP seek support
 +- when transcoding with ffmpeg (i.e. not streamcopying), -ss is now accurate
 +  even when used as an input option. Previous behavior can be restored with
 +  the -noaccurate_seek option.
 +- ffmpeg -t option can now be used for inputs, to limit the duration of
 +  data read from an input file
 +- incomplete Voxware MetaSound decoder
 +- read EXIF metadata from JPEG
 +- DVB teletext decoder
 +- phase filter ported from libmpcodecs
 +- w3fdif filter
 +- Opus support in Matroska
 +- FFV1 version 1.3 is stable and no longer experimental
 +- FFV1: YUVA(444,422,420) 9, 10 and 16 bit support
 +- changed DTS stream id in lavf mpeg ps muxer from 0x8a to 0x88, to be
 +  more consistent with other muxers.
 +- adelay filter
 +- pullup filter ported from libmpcodecs
 +- ffprobe -read_intervals option
 +- Lossless and alpha support for WebP decoder
 +- Error Resilient AAC syntax (ER AAC LC) decoding
 +- Low Delay AAC (ER AAC LD) decoding
 +- mux chapters in ASF files
 +- SFTP protocol (via libssh)
 +- libx264: add ability to encode in YUVJ422P and YUVJ444P
 +- Fraps: use BT.709 colorspace by default for yuv, as reference fraps decoder does
 +- make decoding alpha optional for prores, ffv1 and vp6 by setting
 +  the skip_alpha flag.
 +- ladspa wrapper filter
 +- native VP9 decoder
 +- dpx parser
 +- max_error_rate parameter in ffmpeg
 +- PulseAudio output device
 +- ReplayGain scanner
 +- Enhanced Low Delay AAC (ER AAC ELD) decoding (no LD SBR support)
 +- Linux framebuffer output device
 +- HEVC decoder
 +- raw HEVC, HEVC in MOV/MP4, HEVC in Matroska, HEVC in MPEG-TS demuxing
 +- mergeplanes filter
 +
 +
 +version 2.0:
 +
 +- curves filter
  - reference-counting for AVFrame and AVPacket data
 -- avconv now fails when input options are used for output file
 +- ffmpeg now fails when input options are used for output file
    or vice versa
 -- avconv options -filter_script and -filter_complex_script, which allow a
 +- support for Monkey's Audio versions from 3.93
 +- perms and aperms filters
 +- audio filtering support in ffplay
 +- 10% faster aac encoding on x86 and MIPS
 +- sine audio filter source
 +- WebP demuxing and decoding support
 +- ffmpeg options -filter_script and -filter_complex_script, which allow a
    filtergraph description to be read from a file
 +- OpenCL support
 +- audio phaser filter
 +- separatefields filter
 +- libquvi demuxer
  - uniform options syntax across all filters
 +- telecine filter
  - interlace filter
 -- JPEG 2000 decoder
 -- asetpts filter (same as setpts, but for audio)
 +- smptehdbars source
 +- inverse telecine filters (fieldmatch and decimate)
 +- colorbalance filter
 +- colorchannelmixer filter
 +- The matroska demuxer can now output proper verbatim ASS packets. It will
 +  become the default at the next libavformat major bump.
 +- decent native animated GIF encoding
 +- asetrate filter
 +- interleave filter
 +- timeline editing with filters
 +- vidstabdetect and vidstabtransform filters for video stabilization using
 +  the vid.stab library
 +- astats filter
  - trim and atrim filters
 -- avconv -t and -ss (output-only) options are now sample-accurate when
 +- ffmpeg -t and -ss (output-only) options are now sample-accurate when
    transcoding audio
  - Matroska muxer can now put the index at the beginning of the file.
 -- avconv -deinterlace option removed, the yadif filter should be used instead
 +- extractplanes filter
 +- avectorscope filter
 +- ADPCM DTK decoder
 +- ADP demuxer
 +- RSD demuxer
 +- RedSpark demuxer
 +- ADPCM IMA Radical decoder
 +- zmq filters
 +- DCT denoiser filter (dctdnoiz)
 +- Wavelet denoiser filter ported from libmpcodecs as owdenoise (formerly "ow")
  - Apple Intermediate Codec decoder
  - Escape 130 video decoder
 +- FTP protocol support
 +- V4L2 output device
 +- 3D LUT filter (lut3d)
 +- SMPTE 302M audio encoder
  - support for slice multithreading in libavfilter
 +- Hald CLUT support (generation and filtering)
  - VC-1 interlaced B-frame support
  - support for WavPack muxing (raw and in Matroska)
 +- XVideo output device
 +- vignette filter
 +- True Audio (TTA) encoder
  - Go2Webinar decoder
 +- mcdeint filter ported from libmpcodecs
 +- sab filter ported from libmpcodecs
 +- ffprobe -show_chapters option
  - WavPack encoding through libwavpack
 -- Added the -n parameter to avconv
 -- RTMP seek support
 -- when transcoding with avconv (i.e. not streamcopying), -ss is now accurate
 -  even when used as an input option. Previous behavior can be restored with
 -  the -noaccurate_seek option.
 -- avconv -t option can now be used for inputs, to limit the duration of
 -  data read from an input file
 -- Voxware MetaSound decoder
 -- WebP decoder
 -- Error Resilient AAC syntax (ER AAC LC) decoding
 -- Low Delay AAC (ER AAC LD) decoding
 -- mux chapters in ASF files
 -- Opus in Ogg demuxing
 -- Enhanced Low Delay AAC (ER AAC ELD) decoding (no LD SBR support)
 -- F4V muxer
 -- HNM version 4 demuxer and video decoder
 -- HEVC decoder
 -- raw HEVC, HEVC in MOV/MP4, HEVC in Matroska, HEVC in MPEG-TS demuxing
 -- remove avplay -vismv option, which has not worked for a long time
 -- Live HDS muxer
 -- setsar/setdar filters now support variables in ratio expressions
 -- dar variable in the scale filter now returns the actual DAR (i.e. a * sar)
 -- VP9 decoder
 -- support for decoding through VDPAU in avconv (the -hwaccel option)
 -- remove mp3_header_(de)compress bitstream filters
 -- stereoscopic 3d metadata handling
 -- png standalone parser
 -- WebP encoding via libwebp
 +- rotate filter
 +- spp filter ported from libmpcodecs
 +- libgme support
 +- psnr filter
  
  
 -version 9:
 -- av_basename and av_dirname
 -- adobe and limelight publisher authentication in RTMP
 +version 1.2:
 +
  - VDPAU hardware acceleration through normal hwaccel
  - SRTP support
 +- Error diffusion dither in Swscale
 +- Chained Ogg support
 +- Theora Midstream reconfiguration support
 +- EVRC decoder
 +- audio fade filter
 +- filtering audio with unknown channel layout
 +- allpass, bass, bandpass, bandreject, biquad, equalizer, highpass, lowpass
 +  and treble audio filter
 +- improved showspectrum filter, with multichannel support and sox-like colors
 +- histogram filter
 +- tee muxer
 +- il filter ported from libmpcodecs
 +- support ID3v2 tags in ASF files
 +- encrypted TTA stream decoding support
 +- RF64 support in WAV muxer
 +- noise filter ported from libmpcodecs
 +- Subtitles character encoding conversion
 +- blend filter
 +- stereo3d filter ported from libmpcodecs
 +
  
 +version 1.1:
  
 -version 9_beta3:
 -- ashowinfo audio filter
 +- stream disposition information printing in ffprobe
 +- filter for loudness analysis following EBU R128
 +- Opus encoder using libopus
 +- ffprobe -select_streams option
 +- Pinnacle TARGA CineWave YUV16 decoder
 +- TAK demuxer, decoder and parser
 +- DTS-HD demuxer
 +- remove -same_quant, it hasn't worked for years
 +- FFM2 support
 +- X-Face image encoder and decoder
  - 24-bit FLAC encoding
 -- audio volume filter
 -- deprecated the avconv -vol option. the volume filter is to be used instead.
  - multi-channel ALAC encoding up to 7.1
 -- TAK demuxer, parser, and decoder
 -- adaptive frame-level multithreading for H.264
 -
 -
 -version 9_beta2:
  - metadata (INFO tag) support in WAV muxer
 +- subtitles raw text decoder
  - support for building DLLs using MSVC
 -- remove avserver daemon mode
 +- LVF demuxer
 +- ffescape tool
 +- metadata (info chunk) support in CAF muxer
 +- field filter ported from libmpcodecs
 +- AVR demuxer
 +- geq filter ported from libmpcodecs
 +- remove ffserver daemon mode
 +- AST muxer/demuxer
 +- new expansion syntax for drawtext
 +- BRender PIX image decoder
 +- ffprobe -show_entries option
 +- ffprobe -sections option
 +- ADPCM IMA Dialogic decoder
 +- BRSTM demuxer
 +- animated GIF decoder and demuxer
 +- PVF demuxer
 +- subtitles filter
 +- IRCAM muxer/demuxer
 +- Paris Audio File demuxer
 +- Virtual concatenation demuxer
 +- VobSub demuxer
 +- JSON captions for TED talks decoding support
 +- SOX Resampler support in libswresample
 +- aselect filter
 +- SGI RLE 8-bit decoder
 +- Silicon Graphics Motion Video Compressor 1 & 2 decoder
 +- Silicon Graphics Movie demuxer
 +- apad filter
 +- Resolution & pixel format change support with multithreading for H.264
 +- documentation split into per-component manuals
 +- pp (postproc) filter ported from MPlayer
 +- NIST Sphere demuxer
 +- MPL2, VPlayer, MPlayer, AQTitle, PJS and SubViewer v1 subtitles demuxers and decoders
 +- Sony Wave64 muxer
 +- adobe and limelight publisher authentication in RTMP
 +- data: URI scheme
  - support building on the Plan 9 operating system
 -- ffv1: support version 1.3
 +- kerndeint filter ported from MPlayer
 +- histeq filter ported from VirtualDub
 +- Megalux Frame demuxer
 +- 012v decoder
 +- Improved AVC Intra decoding support
  
  
 -version 9_beta1:
 +version 1.0:
  
 -- XWD encoder and decoder
 -- Support for fragmentation in the mov/mp4 muxer
 -- ISMV (Smooth Streaming) muxer
 -- CDXL demuxer and decoder
 -- Apple ProRes encoder
 -- Sun Rasterfile Encoder
 -- remove libpostproc
 -- ID3v2 attached pictures reading and writing
 -- WMA Lossless decoder
 -- XBM encoder
 -- RealAudio Lossless decoder
 -- ZeroCodec decoder
 -- drop support for avconv without libavfilter
 -- add libavresample audio conversion library
 -- audio filters support in libavfilter and avconv
 -- add fps filter
 -- audio split filter
 -- audio mix filter
 -- avprobe output is now standard INI or JSON. The old format can still
 -  be used with -of old.
 +- INI and flat output in ffprobe
 +- Scene detection in libavfilter
  - Indeo Audio decoder
  - channelsplit audio filter
 +- setnsamples audio filter
 +- atempo filter
 +- ffprobe -show_data option
  - RTMPT protocol support
  - iLBC encoding/decoding via libilbc
  - Microsoft Screen 1 decoder
diff --cc configure
+++ b/configure
@@@ -222,25 -193,16 +222,26 @@@ External library support
    --enable-libopenjpeg     enable JPEG 2000 de/encoding via OpenJPEG [no]
    --enable-libopus         enable Opus decoding via libopus [no]
    --enable-libpulse        enable Pulseaudio input via libpulse [no]
 +  --enable-libquvi         enable quvi input via libquvi [no]
    --enable-librtmp         enable RTMP[E] support via librtmp [no]
    --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no]
 +  --enable-libshine        enable fixed-point MP3 encoding via libshine [no]
 +  --enable-libsoxr         enable Include libsoxr resampling [no]
    --enable-libspeex        enable Speex de/encoding via libspeex [no]
 +  --enable-libssh          enable SFTP protocol via libssh [no]
 +  --enable-libstagefright-h264  enable H.264 decoding via libstagefright [no]
    --enable-libtheora       enable Theora encoding via libtheora [no]
 +  --enable-libtwolame      enable MP2 encoding via libtwolame [no]
 +  --enable-libutvideo      enable Ut Video encoding and decoding via libutvideo [no]
 +  --enable-libv4l2         enable libv4l2/v4l-utils [no]
 +  --enable-libvidstab      enable video stabilization using vid.stab [no]
    --enable-libvo-aacenc    enable AAC encoding via libvo-aacenc [no]
    --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]
 -  --enable-libvorbis       enable Vorbis encoding via libvorbis [no]
 +  --enable-libvorbis       enable Vorbis en/decoding via libvorbis,
 +                           native implementation exists [no]
    --enable-libvpx          enable VP8 and VP9 de/encoding via libvpx [no]
    --enable-libwavpack      enable wavpack encoding via libwavpack [no]
+   --enable-libwebp         enable WebP encoding via libwebp [no]
    --enable-libx264         enable H.264 encoding via x264 [no]
    --enable-libxavs         enable AVS encoding via xavs [no]
    --enable-libxvid         enable Xvid encoding via xvidcore,
@@@ -2145,13 -1869,10 +2147,14 @@@ libvpx_vp8_encoder_deps="libvpx
  libvpx_vp9_decoder_deps="libvpx"
  libvpx_vp9_encoder_deps="libvpx"
  libwavpack_encoder_deps="libwavpack"
+ libwebp_encoder_deps="libwebp"
  libx264_encoder_deps="libx264"
 +libx264rgb_encoder_deps="libx264"
  libxavs_encoder_deps="libxavs"
  libxvid_encoder_deps="libxvid"
 +libutvideo_decoder_deps="libutvideo"
 +libutvideo_encoder_deps="libutvideo"
 +libzvbi_teletext_decoder_deps="libzvbi"
  
  # demuxers / muxers
  ac3_demuxer_select="ac3_parser"
@@@ -4432,31 -3924,17 +4435,32 @@@ enabled libvorbis         && require li
  enabled libvpx            && {
      enabled libvpx_vp8_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
                                      die "ERROR: libvpx decoder version must be >=0.9.1"; }
 -    enabled libvpx_vp8_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VPX_CQ" -lvpx ||
 -                                    die "ERROR: libvpx encoder version must be >=0.9.6"; }
 +    enabled libvpx_vp8_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VP8E_SET_MAX_INTRA_BITRATE_PCT" -lvpx ||
 +                                    die "ERROR: libvpx encoder version must be >=0.9.7"; }
      enabled libvpx_vp9_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx || disable libvpx_vp9_decoder; }
 -    enabled libvpx_vp9_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx" -lvpx || disable libvpx_vp9_encoder; } }
 +    enabled libvpx_vp9_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx VP9E_SET_SVC" -lvpx || disable libvpx_vp9_encoder; } }
  enabled libwavpack        && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput  -lwavpack
+ enabled libwebp           && require_pkg_config libwebp webp/encode.h WebPGetEncoderVersion
  enabled libx264           && require libx264 x264.h x264_encoder_encode -lx264 &&
                               { check_cpp_condition x264.h "X264_BUILD >= 118" ||
 -                               die "ERROR: libx264 version must be >= 0.118."; }
 +                               die "ERROR: libx264 must be installed and version must be >= 0.118."; }
  enabled libxavs           && require libxavs xavs.h xavs_encoder_encode -lxavs
  enabled libxvid           && require libxvid xvid.h xvid_global -lxvidcore
 +enabled libzmq            && require_pkg_config libzmq zmq.h zmq_ctx_new
 +enabled libzvbi           && require libzvbi libzvbi.h vbi_decoder_new -lzvbi
 +enabled openal            && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
 +                               check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||
 +                               die "ERROR: openal not found"; } &&
 +                             { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
 +                               die "ERROR: openal must be installed and version must be 1.1 or compatible"; }
 +enabled opencl            && { check_lib2 OpenCL/cl.h clEnqueueNDRangeKernel -Wl,-framework,OpenCL ||
 +                               check_lib2 CL/cl.h clEnqueueNDRangeKernel -lOpenCL ||
 +                               die "ERROR: opencl not found"; } &&
 +                             { ! enabled_any w32threads os2threads ||
 +                               die "opencl currently needs --enable-pthreads or --disable-w32threads"; } &&
 +                             { check_cpp_condition "OpenCL/cl.h" "defined(CL_VERSION_1_2)" ||
 +                               check_cpp_condition "CL/cl.h" "defined(CL_VERSION_1_2)" ||
 +                               die "ERROR: opencl must be installed and version must be 1.2 or compatible"; }
  enabled openssl           && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
                                 check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
                                 check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
@@@ -1178,715 -446,246 +1178,777 @@@ Same as 3, but with extra processing en
  @chapter Video Encoders
  @c man begin VIDEO ENCODERS
  
 +A description of some of the currently available video encoders
 +follows.
 +
 +@section libtheora
 +
 +libtheora Theora encoder wrapper.
 +
 +Requires the presence of the libtheora headers and library during
 +configuration. You need to explicitly configure the build with
 +@code{--enable-libtheora}.
 +
 +For more informations about the libtheora project see
 +@url{http://www.theora.org/}.
 +
 +@subsection Options
 +
 +The following global options are mapped to internal libtheora options
 +which affect the quality and the bitrate of the encoded stream.
 +
 +@table @option
 +@item b
 +Set the video bitrate in bit/s for CBR (Constant Bit Rate) mode.  In
 +case VBR (Variable Bit Rate) mode is enabled this option is ignored.
 +
 +@item flags
 +Used to enable constant quality mode (VBR) encoding through the
 +@option{qscale} flag, and to enable the @code{pass1} and @code{pass2}
 +modes.
 +
 +@item g
 +Set the GOP size.
 +
 +@item global_quality
 +Set the global quality as an integer in lambda units.
 +
 +Only relevant when VBR mode is enabled with @code{flags +qscale}. The
 +value is converted to QP units by dividing it by @code{FF_QP2LAMBDA},
 +clipped in the [0 - 10] range, and then multiplied by 6.3 to get a
 +value in the native libtheora range [0-63]. A higher value corresponds
 +to a higher quality.
 +
 +@item q
 +Enable VBR mode when set to a non-negative value, and set constant
 +quality value as a double floating point value in QP units.
 +
 +The value is clipped in the [0-10] range, and then multiplied by 6.3
 +to get a value in the native libtheora range [0-63].
 +
 +This option is valid only using the @command{ffmpeg} command-line
 +tool. For library interface users, use @option{global_quality}.
 +@end table
 +
 +@subsection Examples
 +
 +@itemize
 +@item
 +Set maximum constant quality (VBR) encoding with @command{ffmpeg}:
 +@example
 +ffmpeg -i INPUT -codec:v libtheora -q:v 10 OUTPUT.ogg
 +@end example
 +
 +@item
 +Use @command{ffmpeg} to convert a CBR 1000 kbps Theora video stream:
 +@example
 +ffmpeg -i INPUT -codec:v libtheora -b:v 1000k OUTPUT.ogg
 +@end example
 +@end itemize
 +
 +@section libvpx
 +
 +VP8 format supported through libvpx.
 +
 +Requires the presence of the libvpx headers and library during configuration.
 +You need to explicitly configure the build with @code{--enable-libvpx}.
 +
 +@subsection Options
 +
 +Mapping from FFmpeg to libvpx options with conversion notes in parentheses.
 +
 +@table @option
 +
 +@item threads
 +g_threads
 +
 +@item profile
 +g_profile
 +
 +@item vb
 +rc_target_bitrate
 +
 +@item g
 +kf_max_dist
 +
 +@item keyint_min
 +kf_min_dist
 +
 +@item qmin
 +rc_min_quantizer
 +
 +@item qmax
 +rc_max_quantizer
 +
 +@item bufsize, vb
 +rc_buf_sz
 +@code{(bufsize * 1000 / vb)}
 +
 +rc_buf_optimal_sz
 +@code{(bufsize * 1000 / vb * 5 / 6)}
 +
 +@item rc_init_occupancy, vb
 +rc_buf_initial_sz
 +@code{(rc_init_occupancy * 1000 / vb)}
 +
 +@item rc_buffer_aggressivity
 +rc_undershoot_pct
 +
 +@item skip_threshold
 +rc_dropframe_thresh
 +
 +@item qcomp
 +rc_2pass_vbr_bias_pct
 +
 +@item maxrate, vb
 +rc_2pass_vbr_maxsection_pct
 +@code{(maxrate * 100 / vb)}
 +
 +@item minrate, vb
 +rc_2pass_vbr_minsection_pct
 +@code{(minrate * 100 / vb)}
 +
 +@item minrate, maxrate, vb
 +@code{VPX_CBR}
 +@code{(minrate == maxrate == vb)}
 +
 +@item crf
 +@code{VPX_CQ}, @code{VP8E_SET_CQ_LEVEL}
 +
 +@item quality
 +@table @option
 +@item @var{best}
 +@code{VPX_DL_BEST_QUALITY}
 +@item @var{good}
 +@code{VPX_DL_GOOD_QUALITY}
 +@item @var{realtime}
 +@code{VPX_DL_REALTIME}
 +@end table
 +
 +@item speed
 +@code{VP8E_SET_CPUUSED}
 +
 +@item nr
 +@code{VP8E_SET_NOISE_SENSITIVITY}
 +
 +@item mb_threshold
 +@code{VP8E_SET_STATIC_THRESHOLD}
 +
 +@item slices
 +@code{VP8E_SET_TOKEN_PARTITIONS}
 +
 +@item max-intra-rate
 +@code{VP8E_SET_MAX_INTRA_BITRATE_PCT}
 +
 +@item force_key_frames
 +@code{VPX_EFLAG_FORCE_KF}
 +
 +@item Alternate reference frame related
 +@table @option
 +@item vp8flags altref
 +@code{VP8E_SET_ENABLEAUTOALTREF}
 +@item @var{arnr_max_frames}
 +@code{VP8E_SET_ARNR_MAXFRAMES}
 +@item @var{arnr_type}
 +@code{VP8E_SET_ARNR_TYPE}
 +@item @var{arnr_strength}
 +@code{VP8E_SET_ARNR_STRENGTH}
 +@item @var{rc_lookahead}
 +g_lag_in_frames
 +@end table
 +
 +@item vp8flags error_resilient
 +g_error_resilient
 +
 +@end table
 +
 +For more information about libvpx see:
 +@url{http://www.webmproject.org/}
 +
++
+ @section libwebp
+ libwebp WebP Image encoder wrapper
+ libwebp is Google's official encoder for WebP images. It can encode in either
+ lossy or lossless mode. Lossy images are essentially a wrapper around a VP8
+ frame. Lossless images are a separate codec developed by Google.
+ @subsection Pixel Format
+ Currently, libwebp only supports YUV420 for lossy and RGB for lossless due
+ to limitations of the format and libwebp. Alpha is supported for either mode.
+ Because of API limitations, if RGB is passed in when encoding lossy or YUV is
+ passed in for encoding lossless, the pixel format will automatically be
+ converted using functions from libwebp. This is not ideal and is done only for
+ convenience.
+ @subsection Options
+ @table @option
+ @item -lossless @var{boolean}
+ Enables/Disables use of lossless mode. Default is 0.
+ @item -compression_level @var{integer}
+ For lossy, this is a quality/speed tradeoff. Higher values give better quality
+ for a given size at the cost of increased encoding time. For lossless, this is
+ a size/speed tradeoff. Higher values give smaller size at the cost of increased
+ encoding time. More specifically, it controls the number of extra algorithms
+ and compression tools used, and varies the combination of these tools. This
+ maps to the @var{method} option in libwebp. The valid range is 0 to 6.
+ Default is 4.
+ @item -qscale @var{float}
+ For lossy encoding, this controls image quality, 0 to 100. For lossless
+ encoding, this controls the effort and time spent at compressing more. The
+ default value is 75. Note that for usage via libavcodec, this option is called
+ @var{global_quality} and must be multiplied by @var{FF_QP2LAMBDA}.
+ @item -preset @var{type}
+ Configuration preset. This does some automatic settings based on the general
+ type of the image.
+ @table @option
+ @item none
+ Do not use a preset.
+ @item default
+ Use the encoder default.
+ @item picture
+ Digital picture, like portrait, inner shot
+ @item photo
+ Outdoor photograph, with natural lighting
+ @item drawing
+ Hand or line drawing, with high-contrast details
+ @item icon
+ Small-sized colorful images
+ @item text
+ Text-like
+ @end table
+ @end table
  @section libx264
  
 -x264 H.264/MPEG-4 AVC encoder wrapper
 +x264 H.264/MPEG-4 AVC encoder wrapper.
  
 -x264 supports an impressive number of features, including 8x8 and 4x4 adaptive
 -spatial transform, adaptive B-frame placement, CAVLC/CABAC entropy coding,
 -interlacing (MBAFF), lossless mode, psy optimizations for detail retention
 -(adaptive quantization, psy-RD, psy-trellis).
 +This encoder requires the presence of the libx264 headers and library
 +during configuration. You need to explicitly configure the build with
 +@code{--enable-libx264}.
  
 -The Libav wrapper provides a mapping for most of them using global options
 -that match those of the encoders and provides private options for the unique
 -encoder options. Additionally an expert override is provided to directly pass
 -a list of key=value tuples as accepted by x264_param_parse.
 +libx264 supports an impressive number of features, including 8x8 and
 +4x4 adaptive spatial transform, adaptive B-frame placement, CAVLC/CABAC
 +entropy coding, interlacing (MBAFF), lossless mode, psy optimizations
 +for detail retention (adaptive quantization, psy-RD, psy-trellis).
  
 -@subsection Option Mapping
 +Many libx264 encoder options are mapped to FFmpeg global codec
 +options, while unique encoder options are provided through private
 +options. Additionally the @option{x264opts} and @option{x264-params}
 +private options allows to pass a list of key=value tuples as accepted
 +by the libx264 @code{x264_param_parse} function.
 +
 +The x264 project website is at
 +@url{http://www.videolan.org/developers/x264.html}.
 +
 +@subsection Options
 +
 +The following options are supported by the libx264 wrapper. The
 +@command{x264}-equivalent options or values are listed in parentheses
 +for easy migration.
 +
 +To reduce the duplication of documentation, only the private options
 +and some others requiring special attention are documented here. For
 +the documentation of the undocumented generic options, see
 +@ref{codec-options,,the Codec Options chapter}.
 +
 +To get a more accurate and extensive documentation of the libx264
 +options, invoke the command @command{x264 --full-help} or consult
 +the libx264 documentation.
 +
 +@table @option
 +@item b (@emph{bitrate})
 +Set bitrate in bits/s. Note that FFmpeg's @option{b} option is
 +expressed in bits/s, while @command{x264}'s @option{bitrate} is in
 +kilobits/s.
 +
 +@item bf (@emph{bframes})
 +
 +@item g (@emph{keyint})
 +
 +@item qmax (@emph{qpmax})
 +
 +@item qmin (@emph{qpmin})
 +
 +@item qdiff (@emph{qpstep})
 +
 +@item qblur (@emph{qblur})
 +
 +@item qcomp (@emph{qcomp})
 +
 +@item refs (@emph{ref})
 +
 +@item sc_threshold (@emph{scenecut})
 +
 +@item trellis (@emph{trellis})
 +
 +@item nr  (@emph{nr})
 +
 +@item me_range (@emph{merange})
 +
 +@item me_method (@emph{me})
 +Set motion estimation method. Possible values in the decreasing order
 +of speed:
 +
 +@table @samp
 +@item dia (@emph{dia})
 +@item epzs (@emph{dia})
 +Diamond search with radius 1 (fastest). @samp{epzs} is an alias for
 +@samp{dia}.
 +@item hex (@emph{hex})
 +Hexagonal search with radius 2.
 +@item umh (@emph{umh})
 +Uneven multi-hexagon search.
 +@item esa (@emph{esa})
 +Exhaustive search.
 +@item tesa (@emph{tesa})
 +Hadamard exhaustive search (slowest).
 +@end table
 +
 +@item subq (@emph{subme})
 +
 +@item b_strategy (@emph{b-adapt})
 +
 +@item keyint_min (@emph{min-keyint})
 +
 +@item coder
 +Set entropy encoder. Possible values:
 +
 +@table @samp
 +@item ac
 +Enable CABAC.
 +
 +@item vlc
 +Enable CAVLC and disable CABAC. It generates the same effect as
 +@command{x264}'s @option{--no-cabac} option.
 +@end table
 +
 +@item cmp
 +Set full pixel motion estimation comparation algorithm. Possible values:
 +
 +@table @samp
 +@item chroma
 +Enable chroma in motion estimation.
  
 -The following options are supported by the x264 wrapper, the x264-equivalent
 -options follow the Libav ones.
 -
 -@multitable @columnfractions .2 .2
 -@item b                 @tab bitrate
 -Libav @code{b} option is expressed in bits/s, x264 @code{bitrate} in kilobits/s.
 -@item bf                @tab bframes
 -Maximum number of B-frames.
 -@item g                 @tab keyint
 -Maximum GOP size.
 -@item qmin              @tab qpmin
 -@item qmax              @tab qpmax
 -@item qdiff             @tab qpstep
 -@item qblur             @tab qblur
 -@item qcomp             @tab qcomp
 -@item refs              @tab ref
 -@item sc_threshold      @tab scenecut
 -@item trellis           @tab trellis
 -@item nr                @tab nr
 -Noise reduction.
 -@item me_range          @tab merange
 -@item me_method         @tab me
 -@item subq              @tab subme
 -@item b_strategy        @tab b-adapt
 -@item keyint_min        @tab keyint-min
 -@item coder             @tab cabac
 -Set coder to @code{ac} to use CABAC.
 -@item cmp               @tab chroma-me
 -Set to @code{chroma} to use chroma motion estimation.
 -@item threads           @tab threads
 -@item thread_type       @tab sliced_threads
 -Set to @code{slice} to use sliced threading instead of frame threading.
 -@item flags -cgop       @tab open-gop
 -Set @code{-cgop} to use recovery points to close GOPs.
 -@item rc_init_occupancy @tab vbv-init
 -Initial buffer occupancy.
 -@end multitable
 -
 -@subsection Private Options
 -@table @option
 -@item -preset @var{string}
 -Set the encoding preset (cf. x264 --fullhelp).
 -@item -tune @var{string}
 -Tune the encoding params (cf. x264 --fullhelp).
 -@item -profile @var{string}
 -Set profile restrictions (cf. x264 --fullhelp).
 -@item -fastfirstpass @var{integer}
 -Use fast settings when encoding first pass.
 -@item -crf @var{float}
 -Select the quality for constant quality mode.
 -@item -crf_max @var{float}
 +@item sad
 +Ignore chroma in motion estimation. It generates the same effect as
 +@command{x264}'s @option{--no-chroma-me} option.
 +@end table
 +
 +@item threads (@emph{threads})
 +
 +@item thread_type
 +Set multithreading technique. Possible values:
 +
 +@table @samp
 +@item slice
 +Slice-based multithreading. It generates the same effect as
 +@command{x264}'s @option{--sliced-threads} option.
 +@item frame
 +Frame-based multithreading.
 +@end table
 +
 +@item flags
 +Set encoding flags. It can be used to disable closed GOP and enable
 +open GOP by setting it to @code{-cgop}. The result is similar to
 +the behavior of @command{x264}'s @option{--open-gop} option.
 +
 +@item rc_init_occupancy (@emph{vbv-init})
 +
 +@item preset (@emph{preset})
 +Set the encoding preset.
 +
 +@item tune (@emph{tune})
 +Set tuning of the encoding params.
 +
 +@item profile (@emph{profile})
 +Set profile restrictions.
 +
 +@item fastfirstpass
 +Enable fast settings when encoding first pass, when set to 1. When set
 +to 0, it has the same effect of @command{x264}'s
 +@option{--slow-firstpass} option.
 +
 +@item crf (@emph{crf})
 +Set the quality for constant quality mode.
 +
 +@item crf_max (@emph{crf-max})
  In CRF mode, prevents VBV from lowering quality beyond this point.
 -@item -qp @var{integer}
 -Constant quantization parameter rate control method.
 -@item -aq-mode @var{integer}
 -AQ method
  
 -Possible values:
 +@item qp (@emph{qp})
 +Set constant quantization rate control method parameter.
 +
 +@item aq-mode (@emph{aq-mode})
 +Set AQ method. Possible values:
 +
  @table @samp
 -@item none
 +@item none (@emph{0})
 +Disabled.
  
 -@item variance
 +@item variance (@emph{1})
  Variance AQ (complexity mask).
 -@item autovariance
 +
 +@item autovariance (@emph{2})
  Auto-variance AQ (experimental).
  @end table
 -@item -aq-strength @var{float}
 -AQ strength, reduces blocking and blurring in flat and textured areas.
 -@item -psy @var{integer}
 -Use psychovisual optimizations.
 -@item -psy-rd @var{string}
 -Strength of psychovisual optimization, in <psy-rd>:<psy-trellis> format.
 -@item -rc-lookahead @var{integer}
 -Number of frames to look ahead for frametype and ratecontrol.
 -@item -weightb @var{integer}
 -Weighted prediction for B-frames.
 -@item -weightp @var{integer}
 -Weighted prediction analysis method.
  
 -Possible values:
 -@table @samp
 -@item none
 +@item aq-strength (@emph{aq-strength})
 +Set AQ strength, reduce blocking and blurring in flat and textured areas.
  
 -@item simple
 +@item psy
 +Use psychovisual optimizations when set to 1. When set to 0, it has the
 +same effect as @command{x264}'s @option{--no-psy} option.
 +
 +@item psy-rd  (@emph{psy-rd})
 +Set strength of psychovisual optimization, in
 +@var{psy-rd}:@var{psy-trellis} format.
  
 -@item smart
 +@item rc-lookahead (@emph{rc-lookahead})
 +Set number of frames to look ahead for frametype and ratecontrol.
  
 +@item weightb
 +Enable weighted prediction for B-frames when set to 1. When set to 0,
 +it has the same effect as @command{x264}'s @option{--no-weightb} option.
 +
 +@item weightp (@emph{weightp})
 +Set weighted prediction method for P-frames. Possible values:
 +
 +@table @samp
 +@item none (@emph{0})
 +Disabled
 +@item simple (@emph{1})
 +Enable only weighted refs
 +@item smart (@emph{2})
 +Enable both weighted refs and duplicates
  @end table
 -@item -ssim @var{integer}
 -Calculate and print SSIM stats.
 -@item -intra-refresh @var{integer}
 -Use Periodic Intra Refresh instead of IDR frames.
 -@item -bluray-compat @var{integer}
 +
 +@item ssim (@emph{ssim})
 +Enable calculation and printing SSIM stats after the encoding.
 +
 +@item intra-refresh (@emph{intra-refresh})
 +Enable the use of Periodic Intra Refresh instead of IDR frames when set
 +to 1.
 +
 +@item bluray-compat (@emph{bluray-compat})
  Configure the encoder to be compatible with the bluray standard.
  It is a shorthand for setting "bluray-compat=1 force-cfr=1".
 -@item -b-bias @var{integer}
 -Influences how often B-frames are used.
 -@item -b-pyramid @var{integer}
 -Keep some B-frames as references.
  
 -Possible values:
 -@table @samp
 -@item none
 +@item b-bias (@emph{b-bias})
 +Set the influence on how often B-frames are used.
 +
 +@item b-pyramid (@emph{b-pyramid})
 +Set method for keeping of some B-frames as references. Possible values:
  
 -@item strict
 +@table @samp
 +@item none (@emph{none})
 +Disabled.
 +@item strict (@emph{strict})
  Strictly hierarchical pyramid.
 -@item normal
 +@item normal (@emph{normal})
  Non-strict (not Blu-ray compatible).
  @end table
 -@item -mixed-refs @var{integer}
 -One reference per partition, as opposed to one reference per macroblock.
 -@item -8x8dct @var{integer}
 -High profile 8x8 transform.
 -@item -fast-pskip @var{integer}
 -@item -aud @var{integer}
 -Use access unit delimiters.
 -@item -mbtree @var{integer}
 -Use macroblock tree ratecontrol.
 -@item -deblock @var{string}
 -Loop filter parameters, in <alpha:beta> form.
 -@item -cplxblur @var{float}
 -Reduce fluctuations in QP (before curve compression).
 -@item -partitions @var{string}
 -A comma-separated list of partitions to consider, possible values: p8x8, p4x4, b8x8, i8x8, i4x4, none, all.
 -@item -direct-pred @var{integer}
 -Direct MV prediction mode
  
 +@item mixed-refs
 +Enable the use of one reference per partition, as opposed to one
 +reference per macroblock when set to 1. When set to 0, it has the
 +same effect as @command{x264}'s @option{--no-mixed-refs} option.
 +
 +@item 8x8dct
 +Enable adaptive spatial transform (high profile 8x8 transform)
 +when set to 1. When set to 0, it has the same effect as
 +@command{x264}'s @option{--no-8x8dct} option.
 +
 +@item fast-pskip
 +Enable early SKIP detection on P-frames when set to 1. When set
 +to 0, it has the same effect as @command{x264}'s
 +@option{--no-fast-pskip} option.
 +
 +@item aud (@emph{aud})
 +Enable use of access unit delimiters when set to 1.
 +
 +@item mbtree
 +Enable use macroblock tree ratecontrol when set to 1. When set
 +to 0, it has the same effect as @command{x264}'s
 +@option{--no-mbtree} option.
 +
 +@item deblock (@emph{deblock})
 +Set loop filter parameters, in @var{alpha}:@var{beta} form.
 +
 +@item cplxblur (@emph{cplxblur})
 +Set fluctuations reduction in QP (before curve compression).
 +
 +@item partitions (@emph{partitions})
 +Set partitions to consider as a comma-separated list of. Possible
 +values in the list:
 +
 +@table @samp
 +@item p8x8
 +8x8 P-frame partition.
 +@item p4x4
 +4x4 P-frame partition.
 +@item b8x8
 +4x4 B-frame partition.
 +@item i8x8
 +8x8 I-frame partition.
 +@item i4x4
 +4x4 I-frame partition.
 +(Enabling @samp{p4x4} requires @samp{p8x8} to be enabled. Enabling
 +@samp{i8x8} requires adaptive spatial transform (@option{8x8dct}
 +option) to be enabled.)
 +@item none (@emph{none})
 +Do not consider any partitions.
 +@item all (@emph{all})
 +Consider every partition.
 +@end table
 +
 +@item direct-pred (@emph{direct})
 +Set direct MV prediction mode. Possible values:
 +
 +@table @samp
 +@item none (@emph{none})
 +Disable MV prediction.
 +@item spatial (@emph{spatial})
 +Enable spatial predicting.
 +@item temporal (@emph{temporal})
 +Enable temporal predicting.
 +@item auto (@emph{auto})
 +Automatically decided.
 +@end table
 +
 +@item slice-max-size (@emph{slice-max-size})
 +Set the limit of the size of each slice in bytes. If not specified
 +but RTP payload size (@option{ps}) is specified, that is used.
 +
 +@item stats (@emph{stats})
 +Set the file name for multi-pass stats.
 +
 +@item nal-hrd (@emph{nal-hrd})
 +Set signal HRD information (requires @option{vbv-bufsize} to be set).
  Possible values:
 +
  @table @samp
 -@item none
 +@item none (@emph{none})
 +Disable HRD information signaling.
 +@item vbr (@emph{vbr})
 +Variable bit rate.
 +@item cbr (@emph{cbr})
 +Constant bit rate (not allowed in MP4 container).
 +@end table
  
 -@item spatial
 +@item x264opts (N.A.)
 +Set any x264 option, see @command{x264 --fullhelp} for a list.
  
 -@item temporal
 +Argument is a list of @var{key}=@var{value} couples separated by
 +":". In @var{filter} and @var{psy-rd} options that use ":" as a separator
 +themselves, use "," instead. They accept it as well since long ago but this
 +is kept undocumented for some reason.
  
 -@item auto
 +For example to specify libx264 encoding options with @command{ffmpeg}:
 +@example
 +ffmpeg -i foo.mpg -vcodec libx264 -x264opts keyint=123:min-keyint=20 -an out.mkv
 +@end example
 +
 +@item x264-params (N.A.)
 +Override the x264 configuration using a :-separated list of key=value
 +parameters.
 +
 +This option is functionally the same as the @option{x264opts}, but is
 +duplicated for compability with the Libav fork.
  
 +For example to specify libx264 encoding options with @command{ffmpeg}:
 +@example
 +ffmpeg -i INPUT -c:v libx264 -x264-params level=30:bframes=0:weightp=0:\
 +cabac=0:ref=1:vbv-maxrate=768:vbv-bufsize=2000:analyse=all:me=umh:\
 +no-fast-pskip=1:subq=6:8x8dct=0:trellis=0 OUTPUT
 +@end example
  @end table
 -@item -slice-max-size @var{integer}
 -Limit the size of each slice in bytes.
 -@item -stats @var{string}
 -Filename for 2 pass stats.
 -@item -nal-hrd @var{integer}
 -Signal HRD information (requires vbv-bufsize; cbr not allowed in .mp4).
  
 -Possible values:
 +Encoding ffpresets for common usages are provided so they can be used with the
 +general presets system (e.g. passing the @option{pre} option).
 +
 +@section libxvid
 +
 +Xvid MPEG-4 Part 2 encoder wrapper.
 +
 +This encoder requires the presence of the libxvidcore headers and library
 +during configuration. You need to explicitly configure the build with
 +@code{--enable-libxvid --enable-gpl}.
 +
 +The native @code{mpeg4} encoder supports the MPEG-4 Part 2 format, so
 +users can encode to this format without this library.
 +
 +@subsection Options
 +
 +The following options are supported by the libxvid wrapper. Some of
 +the following options are listed but are not documented, and
 +correspond to shared codec options. See @ref{codec-options,,the Codec
 +Options chapter} for their documentation. The other shared options
 +which are not listed have no effect for the libxvid encoder.
 +
 +@table @option
 +@item b
 +
 +@item g
 +
 +@item qmin
 +
 +@item qmax
 +
 +@item mpeg_quant
 +
 +@item threads
 +
 +@item bf
 +
 +@item b_qfactor
 +
 +@item b_qoffset
 +
 +@item flags
 +Set specific encoding flags. Possible values:
 +
  @table @samp
 -@item none
  
 -@item vbr
 +@item mv4
 +Use four motion vector by macroblock.
 +
 +@item aic
 +Enable high quality AC prediction.
 +
 +@item gray
 +Only encode grayscale.
 +
 +@item gmc
 +Enable the use of global motion compensation (GMC).
 +
 +@item qpel
 +Enable quarter-pixel motion compensation.
 +
 +@item cgop
 +Enable closed GOP.
 +
 +@item global_header
 +Place global headers in extradata instead of every keyframe.
 +
 +@end table
 +
 +@item trellis
 +
 +@item me_method
 +Set motion estimation method. Possible values in decreasing order of
 +speed and increasing order of quality:
  
 -@item cbr
 +@table @samp
 +@item zero
 +Use no motion estimation (default).
 +
 +@item phods
 +@item x1
 +@item log
 +Enable advanced diamond zonal search for 16x16 blocks and half-pixel
 +refinement for 16x16 blocks. @samp{x1} and @samp{log} are aliases for
 +@samp{phods}.
 +
 +@item epzs
 +Enable all of the things described above, plus advanced diamond zonal
 +search for 8x8 blocks, half-pixel refinement for 8x8 blocks, and motion
 +estimation on chroma planes.
 +
 +@item full
 +Enable all of the things described above, plus extended 16x16 and 8x8
 +blocks search.
 +@end table
 +
 +@item mbd
 +Set macroblock decision algorithm. Possible values in the increasing
 +order of quality:
 +
 +@table @samp
 +@item simple
 +Use macroblock comparing function algorithm (default).
  
 +@item bits
 +Enable rate distortion-based half pixel and quarter pixel refinement for
 +16x16 blocks.
 +
 +@item rd
 +Enable all of the things described above, plus rate distortion-based
 +half pixel and quarter pixel refinement for 8x8 blocks, and rate
 +distortion-based search using square pattern.
  @end table
 -@item -x264-params @var{string}
 -Override the x264 configuration using a :-separated list of key=value parameters.
 +
 +@item lumi_aq
 +Enable lumi masking adaptive quantization when set to 1. Default is 0
 +(disabled).
 +
 +@item variance_aq
 +Enable variance adaptive quantization when set to 1. Default is 0
 +(disabled).
 +
 +When combined with @option{lumi_aq}, the resulting quality will not
 +be better than any of the two specified individually. In other
 +words, the resulting quality will be the worse one of the two
 +effects.
 +
 +@item ssim
 +Set structural similarity (SSIM) displaying method. Possible values:
 +
 +@table @samp
 +@item off
 +Disable displaying of SSIM information.
 +
 +@item avg
 +Output average SSIM at the end of encoding to stdout. The format of
 +showing the average SSIM is:
 +
  @example
 --x264-params level=30:bframes=0:weightp=0:cabac=0:ref=1:vbv-maxrate=768:vbv-bufsize=2000:analyse=all:me=umh:no-fast-pskip=1:subq=6:8x8dct=0:trellis=0
 +Average SSIM: %f
  @end example
 +
 +For users who are not familiar with C, %f means a float number, or
 +a decimal (e.g. 0.939232).
 +
 +@item frame
 +Output both per-frame SSIM data during encoding and average SSIM at
 +the end of encoding to stdout. The format of per-frame information
 +is:
 +
 +@example
 +       SSIM: avg: %1.3f min: %1.3f max: %1.3f
 +@end example
 +
 +For users who are not familiar with C, %1.3f means a float number
 +rounded to 3 digits after the dot (e.g. 0.932).
 +
  @end table
  
 -Encoding avpresets for common usages are provided so they can be used with the
 -general presets system (e.g. passing the @code{-pre} option).
 +@item ssim_acc
 +Set SSIM accuracy. Valid options are integers within the range of
 +0-4, while 0 gives the most accurate result and 4 computes the
 +fastest.
 +
 +@end table
 +
 +@section png
 +
 +PNG image encoder.
 +
 +@subsection Private options
 +
 +@table @option
 +@item dpi @var{integer}
 +Set physical density of pixels, in dots per inch, unset by default
 +@item dpm @var{integer}
 +Set physical density of pixels, in dots per meter, unset by default
 +@end table
  
  @section ProRes
  
@@@ -491,12 -415,10 +491,12 @@@ following image formats are supported
      @tab YUV, JPEG and some extension is not supported yet.
  @item Truevision Targa  @tab X @tab X
      @tab Targa (.TGA) image format
- @item WebP         @tab @tab X
-     @tab WebP image format
+ @item WebP         @tab @tab X
+     @tab WebP image format, encoding supported through external library libwebp
 -@item XBM  @tab X @tab
 +@item XBM  @tab X @tab X
      @tab X BitMap image format
 +@item XFace @tab X @tab X
 +    @tab X-Face image format
  @item XWD  @tab X @tab X
      @tab X Window Dump image format
  @end multitable
Simple merge
@@@ -509,17 -437,10 +509,18 @@@ void avcodec_register_all(void
      REGISTER_ENCDEC (LIBVPX_VP8,        libvpx_vp8);
      REGISTER_ENCDEC (LIBVPX_VP9,        libvpx_vp9);
      REGISTER_ENCODER(LIBWAVPACK,        libwavpack);
+     REGISTER_ENCODER(LIBWEBP,           libwebp);
      REGISTER_ENCODER(LIBX264,           libx264);
 +    REGISTER_ENCODER(LIBX264RGB,        libx264rgb);
      REGISTER_ENCODER(LIBXAVS,           libxavs);
      REGISTER_ENCODER(LIBXVID,           libxvid);
 +    REGISTER_DECODER(LIBZVBI_TELETEXT,  libzvbi_teletext);
 +    REGISTER_ENCODER(LIBAACPLUS,        libaacplus);
 +
 +    /* text */
 +    REGISTER_DECODER(BINTEXT,           bintext);
 +    REGISTER_DECODER(XBIN,              xbin);
 +    REGISTER_DECODER(IDF,               idf);
  
      /* parsers */
      REGISTER_PARSER(AAC,                aac);
index 0000000,74e73dc..5e0c7a8
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,287 +1,287 @@@
 - * This file is part of Libav.
+ /*
+  * WebP encoding support via libwebp
+  * Copyright (c) 2013 Justin Ruggles <justin.ruggles@gmail.com>
+  *
 - * Libav is free software; you can redistribute it and/or
++ * This file is part of FFmpeg.
+  *
 - * Libav is distributed in the hope that it will be useful,
++ * 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.
+  *
 - * License along with Libav; if not, write to the Free Software
++ * 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 FFmpeg; if not, write to the Free Software
+  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+  */
+ /**
+  * @file
+  * WebP encoder using libwebp
+  */
+ #include <webp/encode.h>
+ #include "libavutil/common.h"
+ #include "libavutil/frame.h"
+ #include "libavutil/imgutils.h"
+ #include "libavutil/opt.h"
+ #include "avcodec.h"
+ #include "internal.h"
+ typedef struct LibWebPContext {
+     AVClass *class;         // class for AVOptions
+     float quality;          // lossy quality 0 - 100
+     int lossless;           // use lossless encoding
+     int preset;             // configuration preset
+     int chroma_warning;     // chroma linesize mismatch warning has been printed
+     int conversion_warning; // pixel format conversion warning has been printed
+     WebPConfig config;      // libwebp configuration
+ } LibWebPContext;
+ static int libwebp_error_to_averror(int err)
+ {
+     switch (err) {
+     case VP8_ENC_ERROR_OUT_OF_MEMORY:
+     case VP8_ENC_ERROR_BITSTREAM_OUT_OF_MEMORY:
+         return AVERROR(ENOMEM);
+     case VP8_ENC_ERROR_NULL_PARAMETER:
+     case VP8_ENC_ERROR_INVALID_CONFIGURATION:
+     case VP8_ENC_ERROR_BAD_DIMENSION:
+         return AVERROR(EINVAL);
+     }
+     return AVERROR_UNKNOWN;
+ }
+ static av_cold int libwebp_encode_init(AVCodecContext *avctx)
+ {
+     LibWebPContext *s = avctx->priv_data;
+     int ret;
+     if (avctx->global_quality < 0)
+         avctx->global_quality = 75 * FF_QP2LAMBDA;
+     s->quality = av_clipf(avctx->global_quality / (float)FF_QP2LAMBDA,
+                           0.0f, 100.0f);
+     if (avctx->compression_level < 0 || avctx->compression_level > 6) {
+         av_log(avctx, AV_LOG_WARNING, "invalid compression level: %d\n",
+                avctx->compression_level);
+         avctx->compression_level = av_clip(avctx->compression_level, 0, 6);
+     }
+     if (s->preset >= WEBP_PRESET_DEFAULT) {
+         ret = WebPConfigPreset(&s->config, s->preset, s->quality);
+         if (!ret)
+             return AVERROR_UNKNOWN;
+         s->lossless              = s->config.lossless;
+         s->quality               = s->config.quality;
+         avctx->compression_level = s->config.method;
+     } else {
+         ret = WebPConfigInit(&s->config);
+         if (!ret)
+             return AVERROR_UNKNOWN;
+         s->config.lossless = s->lossless;
+         s->config.quality  = s->quality;
+         s->config.method   = avctx->compression_level;
+         ret = WebPValidateConfig(&s->config);
+         if (!ret)
+             return AVERROR(EINVAL);
+     }
+     av_log(avctx, AV_LOG_DEBUG, "%s - quality=%.1f method=%d\n",
+            s->lossless ? "Lossless" : "Lossy", s->quality,
+            avctx->compression_level);
+     return 0;
+ }
+ static int libwebp_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
+                                 const AVFrame *frame, int *got_packet)
+ {
+     LibWebPContext *s  = avctx->priv_data;
+     AVFrame *alt_frame = NULL;
+     WebPPicture *pic = NULL;
+     WebPMemoryWriter mw = { 0 };
+     int ret;
+     if (avctx->width > WEBP_MAX_DIMENSION || avctx->height > WEBP_MAX_DIMENSION) {
+         av_log(avctx, AV_LOG_ERROR, "Picture size is too large. Max is %dx%d.\n",
+                WEBP_MAX_DIMENSION, WEBP_MAX_DIMENSION);
+         return AVERROR(EINVAL);
+     }
+     pic = av_malloc(sizeof(*pic));
+     if (!pic)
+         return AVERROR(ENOMEM);
+     ret = WebPPictureInit(pic);
+     if (!ret) {
+         ret = AVERROR_UNKNOWN;
+         goto end;
+     }
+     pic->width  = avctx->width;
+     pic->height = avctx->height;
+     if (avctx->pix_fmt == AV_PIX_FMT_RGB32) {
+         if (!s->lossless) {
+             /* libwebp will automatically convert RGB input to YUV when
+                encoding lossy. */
+             if (!s->conversion_warning) {
+                 av_log(avctx, AV_LOG_WARNING,
+                        "Using libwebp for RGB-to-YUV conversion. You may want "
+                        "to consider passing in YUV instead for lossy "
+                        "encoding.\n");
+                 s->conversion_warning = 1;
+             }
+         }
+         pic->use_argb    = 1;
+         pic->argb        = (uint32_t *)frame->data[0];
+         pic->argb_stride = frame->linesize[0] / 4;
+     } else {
+         if (frame->linesize[1] != frame->linesize[2]) {
+             if (!s->chroma_warning) {
+                 av_log(avctx, AV_LOG_WARNING,
+                        "Copying frame due to differing chroma linesizes.\n");
+                 s->chroma_warning = 1;
+             }
+             alt_frame = av_frame_alloc();
+             if (!alt_frame) {
+                 ret = AVERROR(ENOMEM);
+                 goto end;
+             }
+             alt_frame->width  = frame->width;
+             alt_frame->height = frame->height;
+             alt_frame->format = frame->format;
+             ret = av_frame_get_buffer(alt_frame, 32);
+             if (ret < 0)
+                 goto end;
+             av_image_copy(alt_frame->data, alt_frame->linesize,
+                           frame->data, frame->linesize,
+                           avctx->pix_fmt, frame->width, frame->height);
+             frame = alt_frame;
+         }
+         pic->use_argb  = 0;
+         pic->y         = frame->data[0];
+         pic->u         = frame->data[1];
+         pic->v         = frame->data[2];
+         pic->y_stride  = frame->linesize[0];
+         pic->uv_stride = frame->linesize[1];
+         if (avctx->pix_fmt == AV_PIX_FMT_YUVA420P) {
+             pic->colorspace = WEBP_YUV420A;
+             pic->a          = frame->data[3];
+             pic->a_stride   = frame->linesize[3];
+         } else {
+             pic->colorspace = WEBP_YUV420;
+         }
+         if (s->lossless) {
+             /* We do not have a way to automatically prioritize RGB over YUV
+                in automatic pixel format conversion based on whether we're
+                encoding lossless or lossy, so we do conversion with libwebp as
+                a convenience. */
+             if (!s->conversion_warning) {
+                 av_log(avctx, AV_LOG_WARNING,
+                        "Using libwebp for YUV-to-RGB conversion. You may want "
+                        "to consider passing in RGB instead for lossless "
+                        "encoding.\n");
+                 s->conversion_warning = 1;
+             }
+ #if (WEBP_ENCODER_ABI_VERSION <= 0x201)
+             /* libwebp should do the conversion automatically, but there is a
+                bug that causes it to return an error instead, so a work-around
+                is required.
+                See https://code.google.com/p/webp/issues/detail?id=178 */
+             pic->memory_ = (void*)1;  /* something non-null */
+             ret = WebPPictureYUVAToARGB(pic);
+             if (!ret) {
+                 av_log(avctx, AV_LOG_ERROR,
+                        "WebPPictureYUVAToARGB() failed with error: %d\n",
+                        pic->error_code);
+                 ret = libwebp_error_to_averror(pic->error_code);
+                 goto end;
+             }
+             pic->memory_ = NULL;  /* restore pointer */
+ #endif
+         }
+     }
+     WebPMemoryWriterInit(&mw);
+     pic->custom_ptr = &mw;
+     pic->writer     = WebPMemoryWrite;
+     ret = WebPEncode(&s->config, pic);
+     if (!ret) {
+         av_log(avctx, AV_LOG_ERROR, "WebPEncode() failed with error: %d\n",
+                pic->error_code);
+         ret = libwebp_error_to_averror(pic->error_code);
+         goto end;
+     }
+     ret = ff_alloc_packet(pkt, mw.size);
+     if (ret < 0)
+         goto end;
+     memcpy(pkt->data, mw.mem, mw.size);
+     pkt->flags |= AV_PKT_FLAG_KEY;
+     *got_packet = 1;
+ end:
+     free(mw.mem); /* must use free() according to libwebp documentation */
+     WebPPictureFree(pic);
+     av_freep(&pic);
+     av_frame_free(&alt_frame);
+     return ret;
+ }
+ #define OFFSET(x) offsetof(LibWebPContext, x)
+ #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
+ static const AVOption options[] = {
+     { "lossless",   "Use lossless mode",       OFFSET(lossless), AV_OPT_TYPE_INT,   { .i64 =  0 },  0, 1,                           VE           },
+     { "preset",     "Configuration preset",    OFFSET(preset),   AV_OPT_TYPE_INT,   { .i64 = -1 }, -1, WEBP_PRESET_TEXT,            VE, "preset" },
+     { "none",       "do not use a preset",                              0, AV_OPT_TYPE_CONST, { .i64 = -1                  }, 0, 0, VE, "preset" },
+     { "default",    "default preset",                                   0, AV_OPT_TYPE_CONST, { .i64 = WEBP_PRESET_DEFAULT }, 0, 0, VE, "preset" },
+     { "picture",    "digital picture, like portrait, inner shot",       0, AV_OPT_TYPE_CONST, { .i64 = WEBP_PRESET_PICTURE }, 0, 0, VE, "preset" },
+     { "photo",      "outdoor photograph, with natural lighting",        0, AV_OPT_TYPE_CONST, { .i64 = WEBP_PRESET_PHOTO   }, 0, 0, VE, "preset" },
+     { "drawing",    "hand or line drawing, with high-contrast details", 0, AV_OPT_TYPE_CONST, { .i64 = WEBP_PRESET_DRAWING }, 0, 0, VE, "preset" },
+     { "icon",       "small-sized colorful images",                      0, AV_OPT_TYPE_CONST, { .i64 = WEBP_PRESET_ICON    }, 0, 0, VE, "preset" },
+     { "text",       "text-like",                                        0, AV_OPT_TYPE_CONST, { .i64 = WEBP_PRESET_TEXT    }, 0, 0, VE, "preset" },
+     { NULL },
+ };
+ static const AVClass class = {
+     .class_name = "libwebp",
+     .item_name  = av_default_item_name,
+     .option     = options,
+     .version    = LIBAVUTIL_VERSION_INT,
+ };
+ static const AVCodecDefault libwebp_defaults[] = {
+     { "compression_level",  "4"  },
+     { "global_quality",     "-1" },
+     { NULL },
+ };
+ AVCodec ff_libwebp_encoder = {
+     .name           = "libwebp",
+     .long_name      = NULL_IF_CONFIG_SMALL("libwebp WebP image"),
+     .type           = AVMEDIA_TYPE_VIDEO,
+     .id             = AV_CODEC_ID_WEBP,
+     .priv_data_size = sizeof(LibWebPContext),
+     .init           = libwebp_encode_init,
+     .encode2        = libwebp_encode_frame,
+     .pix_fmts       = (const enum AVPixelFormat[]) {
+         AV_PIX_FMT_RGB32,
+         AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVA420P,
+         AV_PIX_FMT_NONE
+     },
+     .priv_class     = &class,
+     .defaults       = libwebp_defaults,
+ };
   * Libavcodec version macros.
   */
  
 +#include "libavutil/avutil.h"
 +
  #define LIBAVCODEC_VERSION_MAJOR 55
- #define LIBAVCODEC_VERSION_MINOR  45
- #define LIBAVCODEC_VERSION_MICRO 103
 -#define LIBAVCODEC_VERSION_MINOR 31
 -#define LIBAVCODEC_VERSION_MICRO  0
++#define LIBAVCODEC_VERSION_MINOR  46
++#define LIBAVCODEC_VERSION_MICRO 100
  
  #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
                                                 LIBAVCODEC_VERSION_MINOR, \
@@@ -192,9 -146,9 +192,9 @@@ static const AVClass img2mux_class = 
  AVOutputFormat ff_image2_muxer = {
      .name           = "image2",
      .long_name      = NULL_IF_CONFIG_SMALL("image2 sequence"),
 -    .extensions     = "bmp,dpx,jpeg,jpg,ljpg,pam,pbm,pcx,pgm,pgmyuv,png,"
 -                      "ppm,sgi,tga,tif,tiff,jp2,xwd,sun,ras,rs,im1,im8,im24,"
 -                      "sunras,webp,xbm",
 +    .extensions     = "bmp,dpx,jls,jpeg,jpg,ljpg,pam,pbm,pcx,pgm,pgmyuv,png,"
 +                      "ppm,sgi,tga,tif,tiff,jp2,j2c,j2k,xwd,sun,ras,rs,im1,im8,im24,"
-                       "sunras,xbm,xface",
++                      "sunras,webp,xbm,xface",
      .priv_data_size = sizeof(VideoMuxData),
      .video_codec    = AV_CODEC_ID_MJPEG,
      .write_header   = write_header,