Enable static builds, go1.21
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
DataHoarder 2023-08-08 17:42:01 +02:00
parent 99c9996384
commit 0c4167a1f5
Signed by: DataHoarder
SSH key fingerprint: SHA256:OLTRf6Fl87G52SiR7sWLGNzlJt4WOX+tfI2yxo0z7xk
9 changed files with 284 additions and 99 deletions

3
.dockerignore Normal file
View file

@ -0,0 +1,3 @@
testdata/*.ivf
testdata/*.y4m
testdata/testoutput

View file

@ -10,12 +10,19 @@ environment:
GOARCH: amd64
GOAMD64: v3
GOOS: linux
GOTRACEBACK: 2
GOEXPERIMENT: "cgocheck2"
CFLAGS: "-march=native -Ofast"
LDFLAGS: "-flto"
CXXFLAGS: "-march=native -Ofast"
LDFLAGS: "-flto -Wl,-z,stack-size=2097152 -static -static-libstdc++"
PKG_CONFIG_PATH: "/drone/src/build_deps/lib/pkgconfig"
LD_LIBRARY_PATH: "/drone/src/build_deps/lib"
CGO_CFLAGS: "-I/drone/src/build_deps/include"
CGO_LDFLAGS: "-L/drone/src/build_deps/lib"
X264_TAG: "stable"
VMAF_TAG: "v2.3.1"
AOM_TAG: "v3.6.1"
DAV1D_TAG: "1.2.1"
workspace:
path: /drone/src
@ -28,37 +35,57 @@ steps:
- apk add --no-cache wget bash
- ./testdata/prepare.sh
- name: build-x264
image: golang:1.19-bullseye
image: alpine:3.18
commands:
- DEBIAN_FRONTEND=noninteractive apt update
- DEBIAN_FRONTEND=noninteractive apt install -y git gcc g++ bash make libtool nasm
- apk update && apk add --no-cache git gcc g++ bash make libtool nasm
- cd /tmp
- git clone --depth 1 --branch stable https://code.videolan.org/videolan/x264.git && cd x264 && ./configure --disable-cli --disable-ffms --disable-lavf --disable-swscale --enable-static --bit-depth=all --chroma-format=all --enable-lto --enable-pic --disable-opencl --prefix=/drone/src/build_deps && make -j$(nproc) && make install && cd ..
- >-
git clone --depth 1 --branch $X264_TAG https://code.videolan.org/videolan/x264.git && cd x264 &&
./configure --disable-cli --disable-ffms --disable-lavf --disable-swscale --enable-static --bit-depth=all --chroma-format=all --enable-lto --enable-pic --disable-opencl --prefix=/drone/src/build_deps &&
make -j$(nproc) &&
make install &&
cd ..
- name: build-vmaf
image: golang:1.19-bullseye
image: alpine:3.18
commands:
- DEBIAN_FRONTEND=noninteractive apt update
- DEBIAN_FRONTEND=noninteractive apt install -y git gcc g++ bash cmake make libtool meson ccache nasm perl xxd pkg-config
- apk update && apk add --no-cache git gcc g++ bash cmake make libtool meson ccache nasm perl xxd pkgconfig
- cd /tmp
- git clone --depth 1 --branch v2.3.1 https://github.com/Netflix/vmaf.git && cd vmaf/libvmaf && meson setup build . --prefix /drone/src/build_deps --buildtype release -Denable_float=true -Dbuilt_in_models=true && ninja -vC build && ninja -vC build install && cd ../..
- >-
git clone --depth 1 --branch $VMAF_TAG https://github.com/Netflix/vmaf.git && cd vmaf/libvmaf &&
meson setup build . --prefix /drone/src/build_deps --buildtype release --default-library=static
-Denable_float=true -Dbuilt_in_models=true -Denable_tests=false -Denable_docs=false &&
ninja -vC build &&
ninja -vC build install &&
cd ../..
- name: build-libaom
image: golang:1.19-bullseye
image: alpine:3.18
depends_on:
- build-vmaf
commands:
- DEBIAN_FRONTEND=noninteractive apt update
- DEBIAN_FRONTEND=noninteractive apt install -y git gcc g++ bash cmake make libtool ccache nasm perl xxd pkg-config
- apk update && apk add --no-cache git gcc g++ bash cmake make libtool ccache nasm perl xxd pkgconfig
- cd /tmp
- git clone --depth 1 --branch v3.5.0 https://aomedia.googlesource.com/aom.git && cd aom && mkdir b && cd b && cmake .. -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -D CMAKE_INSTALL_PREFIX:PATH=/drone/src/build_deps -DENABLE_DOCS=OFF -DENABLE_EXAMPLES=OFF -DENABLE_TOOLS=OFF -DENABLE_TESTS=OFF -DENABLE_CCACHE=ON -DCONFIG_FRAME_PARALLEL_ENCODE=1 -DCONFIG_AV1_TEMPORAL_DENOISING=1 -DCONFIG_BITRATE_ACCURACY=1 -DCONFIG_TUNE_VMAF=1 -DCONFIG_NN_V2=1 -DCONFIG_RT_ML_PARTITIONING=1 -DCONFIG_THREE_PASS=1 -DCONFIG_AV1_ENCODER=1 -DCONFIG_AV1_DECODER=1 && make -j$(nproc) && make install && cd ../..
- >-
git clone --depth 1 --branch $AOM_TAG https://aomedia.googlesource.com/aom.git && cd aom &&
mkdir b && cd b &&
cmake .. -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -D CMAKE_INSTALL_PREFIX:PATH=/drone/src/build_deps
-DENABLE_DOCS=OFF -DENABLE_EXAMPLES=OFF -DENABLE_TOOLS=OFF -DENABLE_TESTS=OFF -DENABLE_CCACHE=ON -DCONFIG_FRAME_PARALLEL_ENCODE=1 -DCONFIG_AV1_TEMPORAL_DENOISING=1
-DCONFIG_BITRATE_ACCURACY=1 -DCONFIG_TUNE_VMAF=1 -DCONFIG_NN_V2=1 -DCONFIG_RT_ML_PARTITIONING=1 -DCONFIG_THREE_PASS=0 -DCONFIG_AV1_ENCODER=1 -DCONFIG_AV1_DECODER=1 &&
make -j$(nproc) &&
make install &&
cd ../..
- name: build-dav1d
image: golang:1.19-bullseye
image: alpine:3.18
commands:
- DEBIAN_FRONTEND=noninteractive apt update
- DEBIAN_FRONTEND=noninteractive apt install -y git gcc g++ bash libtool meson ccache nasm pkg-config
- apk update && apk add --no-cache git gcc g++ bash libtool meson ccache nasm pkgconfig
- cd /tmp
- git clone --depth 1 --branch 1.0.0 https://code.videolan.org/videolan/dav1d.git && cd dav1d && meson setup build . --prefix /drone/src/build_deps --buildtype release --default-library=static && ninja -vC build && ninja -vC build install && cd ..
- >-
git clone --depth 1 --branch $DAV1D_TAG https://code.videolan.org/videolan/dav1d.git && cd dav1d &&
meson setup build . --prefix /drone/src/build_deps --buildtype release --default-library=static &&
ninja -vC build &&
ninja -vC build install
&& cd ..
- name: test-nocgo-short
image: golang:1.19-alpine
image: golang:1.21-alpine3.18
depends_on:
- prepare-testdata
commands:
@ -66,44 +93,56 @@ steps:
- apk add --no-cache git
- CGO_ENABLED=0 go test -p 1 -failfast -timeout 60m -cover -gcflags=-d=checkptr -v ./... -test.short
- name: test-cgo-libdav1d-long
image: golang:1.19-bullseye
image: golang:1.21-alpine3.18
depends_on:
- build-dav1d
- prepare-testdata
commands:
- DEBIAN_FRONTEND=noninteractive apt update
- DEBIAN_FRONTEND=noninteractive apt install -y git gcc pkg-config
- go test -p 1 -failfast -timeout 60m -cover -gcflags=-d=checkptr -v -tags=disable_library_libaom,disable_library_libx264,disable_library_libvmaf ./decoder/libdav1d
- apk update && apk add --no-cache git gcc pkgconfig musl-dev libstdc++-dev
- >-
go test -p 1 -failfast -timeout 60m -cover -gcflags=-d=checkptr -v
-ldflags '-linkmode external -extldflags "-Wl,-z,stack-size=2097152 -fno-PIC -static -lstdc++"'
-tags 'osusergo netgo static_build disable_library_libaom disable_library_libx264 disable_library_libvmaf'
./decoder/libdav1d
- name: test-cgo-libaom-long
image: golang:1.19-bullseye
image: golang:1.21-alpine3.18
depends_on:
- build-libaom
- prepare-testdata
commands:
- DEBIAN_FRONTEND=noninteractive apt update
- DEBIAN_FRONTEND=noninteractive apt install -y git gcc pkg-config
- go test -p 1 -failfast -timeout 60m -cover -gcflags=-d=checkptr -v -tags=disable_library_libdav1d,disable_library_libx264,disable_library_libvmaf ./encoder/libaom
- apk update && apk add --no-cache git gcc pkgconfig musl-dev libstdc++-dev
- >-
go test -p 1 -failfast -timeout 60m -cover -gcflags=-d=checkptr -v
-ldflags '-linkmode external -extldflags "-Wl,-z,stack-size=2097152 -fno-PIC -static -lstdc++"'
-tags 'osusergo netgo static_build disable_library_libdav1d disable_library_libx264 disable_library_libvmaf'
./encoder/libaom
- name: test-cgo-libx264-long
image: golang:1.19-bullseye
image: golang:1.21-alpine3.18
depends_on:
- build-x264
- prepare-testdata
commands:
- DEBIAN_FRONTEND=noninteractive apt update
- DEBIAN_FRONTEND=noninteractive apt install -y git gcc pkg-config
- go test -p 1 -failfast -timeout 60m -cover -gcflags=-d=checkptr -v -tags=disable_library_libdav1d,disable_library_libaom,disable_library_libvmaf ./encoder/libx264
- apk update && apk add --no-cache git gcc pkgconfig musl-dev libstdc++-dev
- >-
go test -p 1 -failfast -timeout 60m -cover -gcflags=-d=checkptr -v
-ldflags '-linkmode external -extldflags "-Wl,-z,stack-size=2097152 -fno-PIC -static -lstdc++"'
-tags 'osusergo netgo static_build disable_library_libdav1d disable_library_libaom disable_library_libvmaf'
./encoder/libx264
- name: test-cgo-libvmaf-long
image: golang:1.19-bullseye
image: golang:1.21-alpine3.18
depends_on:
- build-dav1d
- build-vmaf
- prepare-testdata
commands:
- DEBIAN_FRONTEND=noninteractive apt update
- DEBIAN_FRONTEND=noninteractive apt install -y git gcc pkg-config
- go test -p 1 -failfast -timeout 60m -cover -gcflags=-d=checkptr -v -tags=disable_library_libaom,disable_library_libx264 ./utilities/libvmaf
- apk update && apk add --no-cache git gcc pkgconfig musl-dev libstdc++-dev
- >-
go test -p 1 -failfast -timeout 60m -cover -gcflags=-d=checkptr -v
-ldflags '-linkmode external -extldflags "-Wl,-z,stack-size=2097152 -fno-PIC -static -lstdc++"'
-tags 'osusergo netgo static_build disable_library_libaom disable_library_libx264'
./utilities/libvmaf
- name: test-cgo-full-short
image: golang:1.19-bullseye
image: golang:1.21-alpine3.18
depends_on:
- build-x264
- build-vmaf
@ -111,9 +150,12 @@ steps:
- build-dav1d
- prepare-testdata
commands:
- DEBIAN_FRONTEND=noninteractive apt update
- DEBIAN_FRONTEND=noninteractive apt install -y git gcc pkg-config
- go test -p 1 -failfast -timeout 60m -cover -gcflags=-d=checkptr -v ./... -test.short
- apk update && apk add --no-cache git gcc pkgconfig musl-dev libstdc++-dev
- >-
go test -p 1 -failfast -timeout 60m -cover -gcflags=-d=checkptr -v
-ldflags '-linkmode external -extldflags "-Wl,-z,stack-size=2097152 -fno-PIC -static -lstdc++"'
-tags 'osusergo netgo static_build'
./... -test.short
---
kind: pipeline
type: docker
@ -126,55 +168,82 @@ environment:
GOPROXY: direct
GOARCH: arm64
GOOS: linux
CFLAGS: "-march=native -Ofast"
LDFLAGS: "-flto"
GOTRACEBACK: 2
GOEXPERIMENT: "cgocheck2"
CFLAGS: "-march=armv8-a -Ofast"
CXXFLAGS: "-march=armv8-a -Ofast"
LDFLAGS: "-flto -Wl,-z,stack-size=2097152 -static -static-libstdc++"
PKG_CONFIG_PATH: "/drone/src/build_deps/lib/pkgconfig"
LD_LIBRARY_PATH: "/drone/src/build_deps/lib"
CGO_CFLAGS: "-I/drone/src/build_deps/include"
CGO_LDFLAGS: "-L/drone/src/build_deps/lib"
X264_TAG: "stable"
VMAF_TAG: "v2.3.1"
AOM_TAG: "v3.6.1"
DAV1D_TAG: "1.2.1"
workspace:
path: /drone/src
steps:
- name: prepare-testdata
image: alpine
image: alpine:3.18
commands:
- apk update
- apk add --no-cache wget bash
- ./testdata/prepare.sh
- name: build-x264
image: golang:1.19-bullseye
image: alpine:3.18
commands:
- DEBIAN_FRONTEND=noninteractive apt update
- DEBIAN_FRONTEND=noninteractive apt install -y git gcc g++ bash make libtool nasm
- apk update && apk add --no-cache git gcc g++ bash make libtool nasm
- cd /tmp
- git clone --depth 1 --branch stable https://code.videolan.org/videolan/x264.git && cd x264 && ./configure --disable-cli --disable-ffms --disable-lavf --disable-swscale --enable-static --bit-depth=all --chroma-format=all --enable-lto --enable-pic --disable-opencl --prefix=/drone/src/build_deps && make -j$(nproc) && make install && cd ..
- >-
git clone --depth 1 --branch $X264_TAG https://code.videolan.org/videolan/x264.git && cd x264 &&
./configure --disable-cli --disable-ffms --disable-lavf --disable-swscale --enable-static --bit-depth=all --chroma-format=all --enable-lto --enable-pic --disable-opencl --prefix=/drone/src/build_deps &&
make -j$(nproc) &&
make install &&
cd ..
- name: build-vmaf
image: golang:1.19-bullseye
image: alpine:3.18
commands:
- DEBIAN_FRONTEND=noninteractive apt update
- DEBIAN_FRONTEND=noninteractive apt install -y git gcc g++ bash cmake make libtool meson ccache nasm perl xxd pkg-config
- apk update && apk add --no-cache git gcc g++ bash cmake make libtool meson ccache nasm perl xxd pkgconfig
- cd /tmp
- git clone --depth 1 --branch v2.3.1 https://github.com/Netflix/vmaf.git && cd vmaf/libvmaf && meson setup build . --prefix /drone/src/build_deps --buildtype release -Denable_float=true -Dbuilt_in_models=true && ninja -vC build && ninja -vC build install && cd ../..
- >-
git clone --depth 1 --branch $VMAF_TAG https://github.com/Netflix/vmaf.git && cd vmaf/libvmaf &&
meson setup build . --prefix /drone/src/build_deps --buildtype release --default-library=static
-Denable_float=true -Dbuilt_in_models=true -Denable_tests=false -Denable_docs=false &&
ninja -vC build &&
ninja -vC build install &&
cd ../..
- name: build-libaom
image: golang:1.19-bullseye
image: alpine:3.18
depends_on:
- build-vmaf
commands:
- DEBIAN_FRONTEND=noninteractive apt update
- DEBIAN_FRONTEND=noninteractive apt install -y git gcc g++ bash cmake make libtool ccache nasm perl xxd pkg-config
- apk update && apk add --no-cache git gcc g++ bash cmake make libtool ccache nasm perl xxd pkgconfig
- cd /tmp
- git clone --depth 1 --branch v3.5.0 https://aomedia.googlesource.com/aom.git && cd aom && mkdir b && cd b && cmake .. -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -D CMAKE_INSTALL_PREFIX:PATH=/drone/src/build_deps -DENABLE_DOCS=OFF -DENABLE_EXAMPLES=OFF -DENABLE_TOOLS=OFF -DENABLE_TESTS=OFF -DENABLE_CCACHE=ON -DCONFIG_FRAME_PARALLEL_ENCODE=1 -DCONFIG_AV1_TEMPORAL_DENOISING=1 -DCONFIG_BITRATE_ACCURACY=1 -DCONFIG_TUNE_VMAF=1 -DCONFIG_NN_V2=1 -DCONFIG_RT_ML_PARTITIONING=1 -DCONFIG_THREE_PASS=1 -DCONFIG_AV1_ENCODER=1 -DCONFIG_AV1_DECODER=1 && make -j$(nproc) && make install && cd ../..
- >-
git clone --depth 1 --branch $AOM_TAG https://aomedia.googlesource.com/aom.git && cd aom &&
mkdir b && cd b &&
cmake .. -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -D CMAKE_INSTALL_PREFIX:PATH=/drone/src/build_deps
-DENABLE_DOCS=OFF -DENABLE_EXAMPLES=OFF -DENABLE_TOOLS=OFF -DENABLE_TESTS=OFF -DENABLE_CCACHE=ON -DCONFIG_FRAME_PARALLEL_ENCODE=1 -DCONFIG_AV1_TEMPORAL_DENOISING=1
-DCONFIG_BITRATE_ACCURACY=1 -DCONFIG_TUNE_VMAF=1 -DCONFIG_NN_V2=1 -DCONFIG_RT_ML_PARTITIONING=1 -DCONFIG_THREE_PASS=0 -DCONFIG_AV1_ENCODER=1 -DCONFIG_AV1_DECODER=1 &&
make -j$(nproc) &&
make install &&
cd ../..
- name: build-dav1d
image: golang:1.19-bullseye
image: alpine:3.18
commands:
- DEBIAN_FRONTEND=noninteractive apt update
- DEBIAN_FRONTEND=noninteractive apt install -y git gcc g++ bash libtool meson ccache nasm pkg-config
- apk update && apk add --no-cache git gcc g++ bash libtool meson ccache nasm pkgconfig
- cd /tmp
- git clone --depth 1 --branch 1.0.0 https://code.videolan.org/videolan/dav1d.git && cd dav1d && meson setup build . --prefix /drone/src/build_deps --buildtype release --default-library=static && ninja -vC build && ninja -vC build install && cd ..
- >-
git clone --depth 1 --branch $DAV1D_TAG https://code.videolan.org/videolan/dav1d.git && cd dav1d &&
meson setup build . --prefix /drone/src/build_deps --buildtype release --default-library=static &&
ninja -vC build &&
ninja -vC build install
&& cd ..
- name: test-nocgo-short
image: golang:1.19-alpine
image: golang:1.21-alpine3.18
depends_on:
- prepare-testdata
commands:
@ -182,44 +251,56 @@ steps:
- apk add --no-cache git
- CGO_ENABLED=0 go test -p 1 -failfast -timeout 60m -cover -gcflags=-d=checkptr -v ./... -test.short
- name: test-cgo-libdav1d-long
image: golang:1.19-bullseye
image: golang:1.21-alpine3.18
depends_on:
- build-dav1d
- prepare-testdata
commands:
- DEBIAN_FRONTEND=noninteractive apt update
- DEBIAN_FRONTEND=noninteractive apt install -y git gcc pkg-config
- go test -p 1 -failfast -timeout 60m -cover -gcflags=-d=checkptr -v -tags=disable_library_libaom,disable_library_libx264,disable_library_libvmaf ./decoder/libdav1d
- apk update && apk add --no-cache git gcc pkgconfig musl-dev libstdc++-dev
- >-
go test -p 1 -failfast -timeout 60m -cover -gcflags=-d=checkptr -v
-ldflags '-linkmode external -extldflags "-Wl,-z,stack-size=2097152 -fno-PIC -static -lstdc++"'
-tags 'osusergo netgo static_build disable_library_libaom disable_library_libx264 disable_library_libvmaf'
./decoder/libdav1d
- name: test-cgo-libaom-long
image: golang:1.19-bullseye
image: golang:1.21-alpine3.18
depends_on:
- build-libaom
- prepare-testdata
commands:
- DEBIAN_FRONTEND=noninteractive apt update
- DEBIAN_FRONTEND=noninteractive apt install -y git gcc pkg-config
- go test -p 1 -failfast -timeout 60m -cover -gcflags=-d=checkptr -v -tags=disable_library_libdav1d,disable_library_libx264,disable_library_libvmaf ./encoder/libaom
- apk update && apk add --no-cache git gcc pkgconfig musl-dev libstdc++-dev
- >-
go test -p 1 -failfast -timeout 60m -cover -gcflags=-d=checkptr -v
-ldflags '-linkmode external -extldflags "-Wl,-z,stack-size=2097152 -fno-PIC -static -lstdc++"'
-tags 'osusergo netgo static_build disable_library_libdav1d disable_library_libx264 disable_library_libvmaf'
./encoder/libaom
- name: test-cgo-libx264-long
image: golang:1.19-bullseye
image: golang:1.21-alpine3.18
depends_on:
- build-x264
- prepare-testdata
commands:
- DEBIAN_FRONTEND=noninteractive apt update
- DEBIAN_FRONTEND=noninteractive apt install -y git gcc pkg-config
- go test -p 1 -failfast -timeout 60m -cover -gcflags=-d=checkptr -v -tags=disable_library_libdav1d,disable_library_libaom,disable_library_libvmaf ./encoder/libx264
- apk update && apk add --no-cache git gcc pkgconfig musl-dev libstdc++-dev
- >-
go test -p 1 -failfast -timeout 60m -cover -gcflags=-d=checkptr -v
-ldflags '-linkmode external -extldflags "-Wl,-z,stack-size=2097152 -fno-PIC -static -lstdc++"'
-tags 'osusergo netgo static_build disable_library_libdav1d disable_library_libaom disable_library_libvmaf'
./encoder/libx264
- name: test-cgo-libvmaf-long
image: golang:1.19-bullseye
image: golang:1.21-alpine3.18
depends_on:
- build-dav1d
- build-vmaf
- prepare-testdata
commands:
- DEBIAN_FRONTEND=noninteractive apt update
- DEBIAN_FRONTEND=noninteractive apt install -y git gcc pkg-config
- go test -p 1 -failfast -timeout 60m -cover -gcflags=-d=checkptr -v -tags=disable_library_libaom,disable_library_libx264 ./utilities/libvmaf
- apk update && apk add --no-cache git gcc pkgconfig musl-dev libstdc++-dev
- >-
go test -p 1 -failfast -timeout 60m -cover -gcflags=-d=checkptr -v
-ldflags '-linkmode external -extldflags "-Wl,-z,stack-size=2097152 -fno-PIC -static -lstdc++"'
-tags 'osusergo netgo static_build disable_library_libaom disable_library_libx264'
./utilities/libvmaf
- name: test-cgo-full-short
image: golang:1.19-bullseye
image: golang:1.21-alpine3.18
depends_on:
- build-x264
- build-vmaf
@ -227,7 +308,10 @@ steps:
- build-dav1d
- prepare-testdata
commands:
- DEBIAN_FRONTEND=noninteractive apt update
- DEBIAN_FRONTEND=noninteractive apt install -y git gcc pkg-config
- go test -p 1 -failfast -timeout 60m -cover -gcflags=-d=checkptr -v ./... -test.short
- apk update && apk add --no-cache git gcc pkgconfig musl-dev libstdc++-dev
- >-
go test -p 1 -failfast -timeout 60m -cover -gcflags=-d=checkptr -v
-ldflags '-linkmode external -extldflags "-Wl,-z,stack-size=2097152 -fno-PIC -static -lstdc++"'
-tags 'osusergo netgo static_build'
./... -test.short
...

64
build/Dockerfile Normal file
View file

@ -0,0 +1,64 @@
FROM golang:1.21-alpine3.18 AS builder
ENV CFLAGS="-march=native -Ofast"
ENV CXXFLAGS="-march=native -Ofast"
ENV LDFLAGS="-flto -Wl,-z,stack-size=2097152 -static -static-libstdc++"
ENV CGO_CFLAGS="-march=native -Ofast"
ARG X264_TAG="stable"
ARG VMAF_TAG="v2.3.1"
ARG AOM_TAG="v3.6.1"
ARG DAV1D_TAG="1.2.1"
RUN apk update && apk add --no-cache \
git gcc g++ musl-dev bash nasm autoconf automake cmake make libtool gettext pkgconfig meson ccache perl xxd
RUN git clone --depth 1 --branch "${X264_TAG}" https://code.videolan.org/videolan/x264.git /tmp/x264 && cd /tmp/x264 && \
./configure --disable-cli --disable-ffms --disable-lavf --disable-swscale --enable-static --bit-depth=all --chroma-format=all --enable-lto --enable-pic --disable-opencl --prefix=/usr && \
make -j$(nproc) && \
make install && \
cd / && \
rm -rf /tmp/x264
RUN git clone --depth 1 --branch "${VMAF_TAG}" https://github.com/Netflix/vmaf.git /tmp/vmaf && cd /tmp/vmaf/libvmaf && \
meson setup build . --prefix /usr --buildtype release --default-library=static \
-Denable_float=true -Dbuilt_in_models=true -Denable_tests=false -Denable_docs=false && \
ninja -vC build && \
ninja -vC build install && \
cd / && \
rm -rf /tmp/vmaf
RUN git clone --depth 1 --branch "${AOM_TAG}" https://aomedia.googlesource.com/aom.git /tmp/aom && cd /tmp/aom && \
mkdir b && cd b && \
cmake .. -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -D CMAKE_INSTALL_PREFIX:PATH=/usr \
-DENABLE_DOCS=OFF -DENABLE_EXAMPLES=OFF -DENABLE_TOOLS=OFF -DENABLE_TESTS=OFF -DENABLE_CCACHE=ON -DCONFIG_FRAME_PARALLEL_ENCODE=1 -DCONFIG_AV1_TEMPORAL_DENOISING=1 \
-DCONFIG_BITRATE_ACCURACY=1 -DCONFIG_TUNE_VMAF=1 -DCONFIG_NN_V2=1 -DCONFIG_RT_ML_PARTITIONING=1 -DCONFIG_THREE_PASS=0 -DCONFIG_AV1_ENCODER=1 -DCONFIG_AV1_DECODER=1 && \
make -j$(nproc) && \
make install && \
cd / && \
rm -rf /tmp/aom
RUN git clone --depth 1 --branch "${DAV1D_TAG}" https://code.videolan.org/videolan/dav1d.git /tmp/dav1d && cd /tmp/dav1d && \
meson setup build . --prefix /usr --buildtype release --default-library=static && \
ninja -vC build && \
ninja -vC build install && \
cd / && \
rm -rf /tmp/dav1d
WORKDIR /usr/src/Ignite
ARG GOPROXY=""
ENV GOPROXY=${GOPROXY}
COPY go.mod go.sum ./
RUN go mod download -x && go mod verify
COPY . .
RUN go build -v -ldflags '-linkmode external -extldflags "-Wl,-z,stack-size=2097152 -fno-PIC -static -lstdc++"' -buildmode pie -tags 'osusergo netgo static_build' -o /usr/bin/ignite-encode-libaom git.gammaspectra.live/S.O.N.G/Ignite/cli/encode-libaom
FROM alpine:3.18
COPY --from=builder /usr/bin/ignite-encode-libaom /usr/bin/ignite-encode-libaom
WORKDIR /

View file

@ -1,3 +1,5 @@
//go:build cgo && !disable_codec_libaom
package main
import (

View file

@ -27,6 +27,7 @@ type Encoder struct {
codec C.aom_codec_ctx_t
raw *C.aom_image_t
frames uint32
pinner runtime.Pinner
}
var libaomVersion = "libaom-av1 " + C.GoString(C.aom_codec_version_str())
@ -297,16 +298,31 @@ func (e *Encoder) EncodeStream(stream *frame.Stream) error {
func (e *Encoder) Encode(f frame.Frame) error {
if f8, ok := f.(frame.TypedFrame[uint8]); ok {
e.raw.planes[0] = (*C.uint8_t)(unsafe.Pointer(&f8.GetNativeLuma()[0]))
e.raw.planes[1] = (*C.uint8_t)(unsafe.Pointer(&f8.GetNativeCb()[0]))
e.raw.planes[2] = (*C.uint8_t)(unsafe.Pointer(&f8.GetNativeCr()[0]))
} else if f16, ok := f.(frame.TypedFrame[uint16]); ok {
e.raw.planes[0] = (*C.uint8_t)(unsafe.Pointer(&f16.GetNativeLuma()[0]))
e.raw.planes[1] = (*C.uint8_t)(unsafe.Pointer(&f16.GetNativeCb()[0]))
e.raw.planes[2] = (*C.uint8_t)(unsafe.Pointer(&f16.GetNativeCr()[0]))
var luma, cb, cr unsafe.Pointer
switch typedFrame := f.(type) {
case frame.TypedFrame[uint8]:
luma = unsafe.Pointer(unsafe.SliceData(typedFrame.GetNativeLuma()))
cb = unsafe.Pointer(unsafe.SliceData(typedFrame.GetNativeCb()))
cr = unsafe.Pointer(unsafe.SliceData(typedFrame.GetNativeCr()))
case frame.TypedFrame[uint16]:
luma = unsafe.Pointer(unsafe.SliceData(typedFrame.GetNativeLuma()))
cb = unsafe.Pointer(unsafe.SliceData(typedFrame.GetNativeCb()))
cr = unsafe.Pointer(unsafe.SliceData(typedFrame.GetNativeCr()))
default:
return errors.New("unknown frame type")
}
e.pinner.Pin(luma)
e.pinner.Pin(cb)
e.pinner.Pin(cr)
e.raw.planes[0] = (*C.uint8_t)(luma)
e.raw.planes[1] = (*C.uint8_t)(cb)
e.raw.planes[2] = (*C.uint8_t)(cr)
defer e.pinner.Unpin()
defer runtime.KeepAlive(f)
//cleanup pointers
defer func() {

View file

@ -25,6 +25,7 @@ type Encoder struct {
pictureIn *C.x264_picture_t
pictureOut C.x264_picture_t
h *C.x264_t
pinner runtime.Pinner
}
var x264Version = fmt.Sprintf("x264 core:%d%s", C.X264_BUILD, C.GoString(C.Version()))
@ -177,16 +178,31 @@ func (e *Encoder) Encode(f frame.Frame) error {
var iNal C.int
var frameSize C.int
if f8, ok := f.(frame.TypedFrame[uint8]); ok {
e.pictureIn.img.plane[0] = (*C.uint8_t)(unsafe.Pointer(&f8.GetNativeLuma()[0]))
e.pictureIn.img.plane[1] = (*C.uint8_t)(unsafe.Pointer(&f8.GetNativeCb()[0]))
e.pictureIn.img.plane[2] = (*C.uint8_t)(unsafe.Pointer(&f8.GetNativeCr()[0]))
} else if f16, ok := f.(frame.TypedFrame[uint16]); ok {
e.pictureIn.img.plane[0] = (*C.uint8_t)(unsafe.Pointer(&f16.GetNativeLuma()[0]))
e.pictureIn.img.plane[1] = (*C.uint8_t)(unsafe.Pointer(&f16.GetNativeCb()[0]))
e.pictureIn.img.plane[2] = (*C.uint8_t)(unsafe.Pointer(&f16.GetNativeCr()[0]))
var luma, cb, cr unsafe.Pointer
switch typedFrame := f.(type) {
case frame.TypedFrame[uint8]:
luma = unsafe.Pointer(unsafe.SliceData(typedFrame.GetNativeLuma()))
cb = unsafe.Pointer(unsafe.SliceData(typedFrame.GetNativeCb()))
cr = unsafe.Pointer(unsafe.SliceData(typedFrame.GetNativeCr()))
case frame.TypedFrame[uint16]:
luma = unsafe.Pointer(unsafe.SliceData(typedFrame.GetNativeLuma()))
cb = unsafe.Pointer(unsafe.SliceData(typedFrame.GetNativeCb()))
cr = unsafe.Pointer(unsafe.SliceData(typedFrame.GetNativeCr()))
default:
return errors.New("unknown frame type")
}
e.pinner.Pin(luma)
e.pinner.Pin(cb)
e.pinner.Pin(cr)
e.pictureIn.img.plane[0] = (*C.uint8_t)(luma)
e.pictureIn.img.plane[1] = (*C.uint8_t)(cb)
e.pictureIn.img.plane[2] = (*C.uint8_t)(cr)
defer e.pinner.Unpin()
defer runtime.KeepAlive(f)
//cleanup pointers
defer func() {

View file

@ -24,7 +24,7 @@ func NewUint16FrameFromBytes(properties Properties, pts int64, data []byte) (*Fr
}
buf := make([]uint16, len(data)/2)
copy(buf, unsafe.Slice((*uint16)(unsafe.Pointer(&data[0])), len(data)/2))
copy(buf, unsafe.Slice((*uint16)(unsafe.Pointer(unsafe.SliceData(data))), len(data)/2))
runtime.KeepAlive(data)
iY := properties.ColorSpace.ChromaSampling.PlaneLumaSamples(properties.Width, properties.Height)

4
go.mod
View file

@ -1,10 +1,10 @@
module git.gammaspectra.live/S.O.N.G/Ignite
go 1.19
go 1.21
require (
github.com/stretchr/testify v1.8.1
golang.org/x/exp v0.0.0-20221126150942-6ab00d035af9
golang.org/x/exp v0.0.0-20230807204917-050eac23e9de
)
require (

4
go.sum
View file

@ -10,8 +10,8 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
golang.org/x/exp v0.0.0-20221126150942-6ab00d035af9 h1:yZNXmy+j/JpX19vZkVktWqAo7Gny4PBWYYK3zskGpx4=
golang.org/x/exp v0.0.0-20221126150942-6ab00d035af9/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
golang.org/x/exp v0.0.0-20230807204917-050eac23e9de h1:l5Za6utMv/HsBWWqzt4S8X17j+kt1uVETUX5UFhn2rE=
golang.org/x/exp v0.0.0-20230807204917-050eac23e9de/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=