On 12/08/2013 06:28 PM, Timothy Gu wrote:
Hi Justin,

On Sunday, December 8, 2013, Justin Ruggles wrote:

---
Updated patch takes into account suggestions from Pascal. Also includes
better documentation about the -method and -qscale options.

Info about lossless options taken from this thread:

https://groups.google.com/a/webmproject.org/d/msg/webp-discuss/HsAzfpKksEo/Dn4zad67S28J

  Changelog               |    1 +
  configure               |    4 +
  doc/encoders.texi       |   61 ++++++++++
  doc/general.texi        |    4 +-
  libavcodec/Makefile     |    1 +
  libavcodec/allcodecs.c  |    1 +
  libavcodec/libwebpenc.c |  291
+++++++++++++++++++++++++++++++++++++++++++++++
  libavcodec/version.h    |    2 +-
  libavformat/img2enc.c   |    2 +-
  9 files changed, 363 insertions(+), 4 deletions(-)
  create mode 100644 libavcodec/libwebpenc.c

diff --git a/Changelog b/Changelog
index 9747720..110b8cb 100644
--- a/Changelog
+++ b/Changelog
@@ -50,6 +50,7 @@ version 10:
  - VP9 decoder
  - support for decoding through VDPAU in avconv (the -hwaccel option)
  - remove mp3_header_(de)compress bitstream filters
+- WebP encoding via libwebp


  version 9:
diff --git a/configure b/configure
index 6fdcb7b..3932ee4 100755
--- a/configure
+++ b/configure
@@ -202,6 +202,7 @@ External library support:
    --enable-libvorbis       enable Vorbis encoding via libvorbis [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,
@@ -1092,6 +1093,7 @@ EXTERNAL_LIBRARY_LIST="
      libvorbis
      libvpx
      libwavpack
+    libwebp
      libx264
      libxavs
      libxvid
@@ -1836,6 +1838,7 @@ 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"
  libxavs_encoder_deps="libxavs"
  libxvid_encoder_deps="libxvid"
@@ -3881,6 +3884,7 @@ enabled libvpx            && {
      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 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."; }
diff --git a/doc/encoders.texi b/doc/encoders.texi
index d6f4bce..fc4cb34 100644
--- a/doc/encoders.texi
+++ b/doc/encoders.texi
@@ -446,6 +446,67 @@ Same as 3, but with extra processing enabled -
corresponding to the wavpack
  @chapter Video Encoders
  @c man begin VIDEO ENCODERS

+@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{number}

I prefer @var{integer}. Same applies for -qscale.


+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{number}
+For lossy encoding, this controls image quality, 0 to 100. For lessless

lossless typo


+encoding, this controls the effort and time spent at compressing more. The

Maybe you can add how qscale differs from compression_quality for lossless
more. Also qscale is originally for lossy encoding only so it feels kinda
weird that it also applies to lossless


I agree that it is weird, but that's how it is. Those descriptions for mode and quality were quoted from Pascal and were the best I could find that actually differentiate the two options for lossless.

mode: "controls the number of extra algorithms and compression tools used, and varies the combination of these tools"

quality: "controls the effort and time spent at compressing more"


-Justin

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to