Add default model to VMAF

This commit is contained in:
DataHoarder 2022-11-11 08:15:44 +01:00
parent 60a6306a43
commit 9943954038
Signed by: DataHoarder
SSH key fingerprint: SHA256:OLTRf6Fl87G52SiR7sWLGNzlJt4WOX+tfI2yxo0z7xk
2 changed files with 29 additions and 21 deletions

View file

@ -33,7 +33,7 @@ steps:
- apk update
- apk add --no-cache git gcc g++ musl-dev 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 && ninja -vC build && ninja -vC build install && cd ..
- 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 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=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=1 -DCONFIG_AV1_ENCODER=1 -DCONFIG_AV1_DECODER=1 && make -j$(nproc) && make install && cd ..
- name: build-dav1d
image: alpine

View file

@ -24,12 +24,6 @@ type VMAF struct {
pictures []*C.VmafPicture
}
type ModelName string
const (
ModelA ModelName = "test"
)
type ModelFlags uint64
const (
@ -39,7 +33,21 @@ const (
ModelFlagDisableTransform ModelFlags = C.VMAF_MODEL_FLAG_DISABLE_TRANSFORM
)
func New(subsample uint, model ModelName, flags ModelFlags, version string) (*VMAF, error) {
type ModelConfiguration struct {
Name string
Version string
Flags ModelFlags
}
func NewModelDefault() *ModelConfiguration {
return &ModelConfiguration{
Name: "vmaf",
Version: "vmaf_v0.6.1",
Flags: ModelFlagsDefault,
}
}
func New(subsample uint, model *ModelConfiguration) (*VMAF, error) {
v := &VMAF{}
var cfg C.VmafConfiguration
@ -52,11 +60,11 @@ func New(subsample uint, model ModelName, flags ModelFlags, version string) (*VM
return nil, fmt.Errorf("vmaf_init error %d", ret)
} else {
var modelConfig C.VmafModelConfig
modelConfig.name = C.CString(model)
modelConfig.name = C.CString(model.Name)
defer C.free(modelConfig.name)
modelConfig.flags = C.uint64_t(flags)
modelConfig.flags = C.uint64_t(model.Flags)
modelVersion := C.CString(version)
modelVersion := C.CString(model.Version)
defer C.free(modelVersion)
if ret = C.vmaf_model_load(&v.model, &modelConfig, modelVersion); ret != 0 {
@ -175,8 +183,8 @@ func (v *VMAF) ScorePooled(method PoolingMethod, indexLow, indexHigh uint) (floa
return score, nil
}
// ReadStreams Read a pair of frame.Stream and queues each frame.Frame via ReadPictures for eventual feature extraction, and flushes at the end.
func (v *VMAF) ReadStreams(reference, distorted *frame.Stream) error {
// ReadStreams Read a pair of frame.Stream and queues each frame.Frame via ReadPictures for eventual feature extraction, and flushes at the end. Returns the count of frame.Frame used (indexes will be up to count - 1).
func (v *VMAF) ReadStreams(reference, distorted *frame.Stream) (uint, error) {
var index uint
var refFrame, distFrame frame.Frame
@ -190,16 +198,16 @@ func (v *VMAF) ReadStreams(reference, distorted *frame.Stream) error {
if !refOk && !distOk {
//flush
if err = v.ReadPictures(nil, nil, index); err != nil {
return err
return index, err
}
return nil
return index, nil
} else if !refOk {
return errors.New("reference ended before distorted")
return index, errors.New("reference ended before distorted")
} else if !distOk {
return errors.New("distorted ended before reference")
return index, errors.New("distorted ended before reference")
} else {
if err = v.ReadPictures(refFrame, distFrame, index); err != nil {
return err
return index, err
}
}
@ -213,7 +221,7 @@ func (v *VMAF) ReadPictures(reference, distorted frame.Frame, index uint) error
if reference == nil && distorted == nil {
//flush
if ret := C.vmaf_read_pictures(v.context, nil, nil, C.uint(index)); ret != 0 {
return fmt.Errorf("vmaf_use_features_from_model error %d", ret)
return fmt.Errorf("vmaf_read_pictures error %d", ret)
} else {
return nil
}
@ -229,7 +237,7 @@ func (v *VMAF) ReadPictures(reference, distorted frame.Frame, index uint) error
if ret := C.vmaf_read_pictures(v.context, ref, dist, C.uint(index)); ret != 0 {
v.deallocatePicture(ref)
v.deallocatePicture(dist)
return fmt.Errorf("vmaf_use_features_from_model error %d", ret)
return fmt.Errorf("vmaf_read_pictures error %d", ret)
} else {
//save memory
v.pictures = append(v.pictures, ref)
@ -263,7 +271,7 @@ func (v *VMAF) Output(path string, format OutputFormat) error {
cPath := C.CString(path)
defer C.free(cPath)
if ret := C.vmaf_write_output(v.context, cPath, format); ret != 0 {
return fmt.Errorf("vmaf_use_features_from_model error %d", ret)
return fmt.Errorf("vmaf_write_output error %d", ret)
}
return nil