This commit is contained in:
parent
99c9996384
commit
0c4167a1f5
3
.dockerignore
Normal file
3
.dockerignore
Normal file
|
@ -0,0 +1,3 @@
|
|||
testdata/*.ivf
|
||||
testdata/*.y4m
|
||||
testdata/testoutput
|
240
.drone.yml
240
.drone.yml
|
@ -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
64
build/Dockerfile
Normal 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 /
|
|
@ -1,3 +1,5 @@
|
|||
//go:build cgo && !disable_codec_libaom
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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
4
go.mod
|
@ -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
4
go.sum
|
@ -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=
|
||||
|
|
Loading…
Reference in a new issue