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