Add default model to VMAF
This commit is contained in:
parent
60a6306a43
commit
9943954038
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue