go-libwebp

Experimental translation from libwebp to Go source.
Log | Files | Refs | README | LICENSE

commit 5089b45b2813af6723b8133fe90a73ee95ca1290
parent c47859304e78ea6698ba3c3d33a0a29c999a9a4b
Author: Jack Mordaunt <jackmordaunt.dev@gmail.com>
Date:   Wed, 10 Jul 2024 16:51:29 +0800

lib/dynamic/webp: [Linux] remove lossless hack

After some testing it seems that we can use float arguments just fine.

Signed-off-by: Jack Mordaunt <jackmordaunt.dev@gmail.com>

Diffstat:
Dlib/dynamic/webp/encode_cgo.go | 16----------------
Dlib/dynamic/webp/encode_default.go | 21---------------------
Mlib/dynamic/webp/lib.go | 8+++++++-
3 files changed, 7 insertions(+), 38 deletions(-)

diff --git a/lib/dynamic/webp/encode_cgo.go b/lib/dynamic/webp/encode_cgo.go @@ -1,16 +0,0 @@ -//go:build linux && cgo - -package webp - -import ( - "image" - "io" - - "git.sr.ht/~jackmordaunt/go-libwebp/lib/common" -) - -// HACK: always use lossless when cgo is activated on linux. cgo on linux provokes -// a bug in purego when using float arguments. -func encodeImpl(w io.Writer, m *image.NRGBA, quality float32) error { - return common.Encode(w, m, quality, wrappedLossless, WebPFree) -} diff --git a/lib/dynamic/webp/encode_default.go b/lib/dynamic/webp/encode_default.go @@ -1,21 +0,0 @@ -//go:build !(linux && cgo) - -package webp - -import ( - "fmt" - "image" - "io" - - "git.sr.ht/~jackmordaunt/go-libwebp/lib/common" -) - -func encodeImpl(w io.Writer, m *image.NRGBA, quality float32) error { - if quality >= 1.0 { - return common.Encode(w, m, quality, wrappedLossless, WebPFree) - } - if WebPEncodeRGBA == nil || WebPFree == nil { - return fmt.Errorf("functions not initialized") - } - return common.Encode(w, m, quality, WebPEncodeRGBA, WebPFree) -} diff --git a/lib/dynamic/webp/lib.go b/lib/dynamic/webp/lib.go @@ -79,7 +79,13 @@ func DecodeImpl(buf []byte) (image.Image, error) { } func EncodeImpl(w io.Writer, m *image.NRGBA, quality float32) error { - return encodeImpl(w, m, quality) + if WebPEncodeRGBA == nil || WebPFree == nil { + return fmt.Errorf("functions not initialized") + } + if quality >= 1.0 { + return common.Encode(w, m, quality, wrappedLossless, WebPFree) + } + return common.Encode(w, m, quality, WebPEncodeRGBA, WebPFree) } // wrappedLossless drops the quality param and does a lossless encode.