85 lines
1.8 KiB
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()
|
|
}
|
|
}
|