From 4a09c9b803fdcfb2f5669a986c880c4e440a3d41 Mon Sep 17 00:00:00 2001 From: Milan Nikolic Date: Fri, 13 Jun 2025 17:01:56 +0200 Subject: [PATCH] Change libjpeg library, rename tag --- README.md | 24 +++++---------------- image/decode.go | 6 ++---- image/{decode_jpeg.go => decode_libjpeg.go} | 12 +++++++---- image/encode.go | 6 ++---- image/{encode_jpeg.go => encode_libjpeg.go} | 15 ++++++------- 5 files changed, 23 insertions(+), 40 deletions(-) rename image/{decode_jpeg.go => decode_libjpeg.go} (58%) rename image/{encode_jpeg.go => encode_libjpeg.go} (66%) diff --git a/README.md b/README.md index 687d5cf..0d8e2c6 100644 --- a/README.md +++ b/README.md @@ -21,32 +21,18 @@ You can also use apps like `ffplay` or `vlc`: ### Build tags -* `opencv` - use `OpenCV` to access camera ([gocv](https://github.com/hybridgroup/gocv)) -* `turbo` - build with `libjpeg-turbo` ([libjpeg-turbo](https://www.libjpeg-turbo.org/)) instead of native Go `image/jpeg` +* `opencv` - use `OpenCV` library to access camera ([gocv](https://github.com/hybridgroup/gocv)) +* `libjpeg` - build with `libjpeg` ([go-libjpeg](https://github.com/pixiv/go-libjpeg)) instead of native Go `image/jpeg` ### Download -Binaries are compiled with static OpenCV/libjpeg-turbo libraries, they should just work: - - - [Linux 64bit](https://github.com/gen2brain/cam2ip/releases/download/1.6/cam2ip-1.6-64bit.tar.gz) - - [Linux 64bit OpenCV](https://github.com/gen2brain/cam2ip/releases/download/1.6/cam2ip-1.6-64bit-cv2.tar.gz) - - [macOS 64bit OpenCV](https://github.com/gen2brain/cam2ip/releases/download/1.6/cam2ip-1.6-darwin-cv2.zip) - - [RPi 32bit](https://github.com/gen2brain/cam2ip/releases/download/1.6/cam2ip-1.6-RPi.tar.gz) - - [RPi 32bit OpenCV](https://github.com/gen2brain/cam2ip/releases/download/1.6/cam2ip-1.6-RPi-cv2.tar.gz) - - [RPi 32bit Static](https://github.com/gen2brain/cam2ip/releases/download/1.6/cam2ip-1.6-RPi-nocgo.tar.gz) - - [RPi3 32bit](https://github.com/gen2brain/cam2ip/releases/download/1.6/cam2ip-1.6-RPi3.tar.gz) - - [RPi3 32bit OpenCV](https://github.com/gen2brain/cam2ip/releases/download/1.6/cam2ip-1.6-RPi3-cv2.tar.gz) - - [Windows 32bit](https://github.com/gen2brain/cam2ip/releases/download/1.6/cam2ip-1.6-32bit.zip) - - [Windows 32bit OpenCV](https://github.com/gen2brain/cam2ip/releases/download/1.6/cam2ip-1.6-32bit-cv2.zip) - - [Windows 64bit](https://github.com/gen2brain/cam2ip/releases/download/1.6/cam2ip-1.6-64bit.zip) - - [Windows 64bit OpenCV](https://github.com/gen2brain/cam2ip/releases/download/1.6/cam2ip-1.6-64bit-cv2.zip) - +Download the latest binaries from the [releases](https://github.com/gen2brain/cam2ip/releases). ### Installation - go get -v github.com/gen2brain/cam2ip/cmd/cam2ip + go install github.com/gen2brain/cam2ip/cmd/cam2ip@latest -This will install app in `$GOPATH/bin/cam2ip`. +This command will install `cam2ip` in `GOBIN`, you can point `GOBIN` to e.g. `/usr/local/bin` or `~/.local/bin`. ### Run in Docker container diff --git a/image/decode.go b/image/decode.go index a63a063..bcc2723 100644 --- a/image/decode.go +++ b/image/decode.go @@ -1,14 +1,12 @@ -//go:build turbo -// +build turbo +//go:build !libjpeg // Package image. package image import ( "image" + "image/jpeg" "io" - - jpeg "github.com/antonini/golibjpegturbo" ) // NewDecoder returns a new Decoder. diff --git a/image/decode_jpeg.go b/image/decode_libjpeg.go similarity index 58% rename from image/decode_jpeg.go rename to image/decode_libjpeg.go index 1f1d6c9..031a6c7 100644 --- a/image/decode_jpeg.go +++ b/image/decode_libjpeg.go @@ -1,13 +1,13 @@ -//go:build !turbo -// +build !turbo +//go:build libjpeg // Package image. package image import ( "image" - "image/jpeg" "io" + + "github.com/pixiv/go-libjpeg/jpeg" ) // NewDecoder returns a new Decoder. @@ -22,5 +22,9 @@ type Decoder struct { // Decode decodes image from JPEG. func (d Decoder) Decode() (image.Image, error) { - return jpeg.Decode(d.r) + return jpeg.Decode(d.r, &jpeg.DecoderOptions{ + DCTMethod: jpeg.DCTFloat, + DisableFancyUpsampling: true, + DisableBlockSmoothing: true, + }) } diff --git a/image/encode.go b/image/encode.go index 42a35fd..ed9dd19 100644 --- a/image/encode.go +++ b/image/encode.go @@ -1,14 +1,12 @@ -//go:build turbo -// +build turbo +//go:build !libjpeg // Package image. package image import ( "image" + "image/jpeg" "io" - - jpeg "github.com/antonini/golibjpegturbo" ) // NewEncoder returns a new Encoder. diff --git a/image/encode_jpeg.go b/image/encode_libjpeg.go similarity index 66% rename from image/encode_jpeg.go rename to image/encode_libjpeg.go index b7755a9..1fa26c7 100644 --- a/image/encode_jpeg.go +++ b/image/encode_libjpeg.go @@ -1,13 +1,13 @@ -//go:build !turbo -// +build !turbo +//go:build libjpeg // Package image. package image import ( "image" - "image/jpeg" "io" + + "github.com/pixiv/go-libjpeg/jpeg" ) // NewEncoder returns a new Encoder. @@ -22,10 +22,7 @@ type Encoder struct { // Encode encodes image to JPEG. func (e Encoder) Encode(img image.Image) error { - err := jpeg.Encode(e.w, img, &jpeg.Options{Quality: 75}) - if err != nil { - return err - } - - return nil + return jpeg.Encode(e.w, img, &jpeg.EncoderOptions{ + Quality: 75, + }) }