Ignite/utilities/libvmaf/libvmaf_test.go

85 lines
1.8 KiB
Go

//go:build cgo && !disable_library_libvmaf && !disable_library_libdav1d
package libvmaf
import (
"git.gammaspectra.live/S.O.N.G/Ignite/decoder/libdav1d"
"git.gammaspectra.live/S.O.N.G/Ignite/decoder/y4m"
"git.gammaspectra.live/S.O.N.G/Ignite/testdata"
"os"
"sync"
"testing"
)
func TestVersion(t *testing.T) {
t.Logf("vmaf version: %s", Version())
}
func TestVMAFYUV420_8bit(t *testing.T) {
if testing.Short() {
t.Skip("skipping test in short mode")
}
referenceFile, err := os.Open(testdata.Y4M_Sintel_Trailer_720p24_YUV420_8bit.Path)
if err != nil {
t.Fatal(err)
}
defer referenceFile.Close()
distortedFile, err := os.Open(testdata.AV1_Sintel_Trailer_720p24_YUV420_8bit_Low.Path)
if err != nil {
t.Fatal(err)
}
defer distortedFile.Close()
referenceDecoder, err := y4m.NewDecoder(referenceFile, nil)
if err != nil {
t.Fatal(err)
}
defer referenceDecoder.Close()
distortedDecoder, err := libdav1d.NewDecoder(distortedFile, nil)
if err != nil {
t.Fatal(err)
}
defer distortedDecoder.Close()
distortedStreams := distortedDecoder.DecodeStream().Copy(2)
encoded := 0
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
for range distortedStreams[0].Channel() {
if encoded%10 == 0 {
t.Logf("frame %d/1253", encoded)
}
encoded++
}
}()
if vmaf, err := New(0, NewModelDefault()); err != nil {
t.Fatal(err)
} else {
frameCount, err := vmaf.ReadStreams(referenceDecoder.DecodeStream(), distortedStreams[1])
if err != nil {
t.Fatal(err)
}
if frameCount != 1253 {
t.Fatalf("expected %d frames, got %d", 1253, frameCount)
}
score, err := vmaf.ScoreAtIndex(800)
if err != nil {
t.Fatal(err)
}
t.Logf("frame 800 score: %f", score)
score, err = vmaf.ScorePooled(PoolingMethodMean, 0, frameCount-1)
if err != nil {
t.Fatal(err)
}
t.Logf("mean score: %f", score)
wg.Wait()
}
}