Add x264 encode test

This commit is contained in:
DataHoarder 2022-11-11 13:23:04 +01:00
parent 499a43d61f
commit ece3dfe96d
Signed by: DataHoarder
SSH key fingerprint: SHA256:OLTRf6Fl87G52SiR7sWLGNzlJt4WOX+tfI2yxo0z7xk

View file

@ -1,7 +1,77 @@
package x264
import "testing"
import (
"git.gammaspectra.live/S.O.N.G/Ignite/decoder/y4m"
"git.gammaspectra.live/S.O.N.G/Ignite/testdata"
"os"
"runtime"
"sync"
"testing"
)
func TestVersion(t *testing.T) {
t.Logf("libx264 version: %s", Version())
}
func TestEncode(t *testing.T) {
if testing.Short() {
t.Skip("skipping encode test in short mode")
}
f, err := os.Open(testdata.Y4M_Sintel_Trailer_720p24_YUV420_8bit)
if err != nil {
t.Fatal(err)
}
defer f.Close()
if pipe, err := y4m.New(f, nil); err != nil {
t.Fatal(err)
} else {
target, err := os.CreateTemp("", "encode_test_*.h264")
if err != nil {
t.Fatal(err)
return
}
defer func() {
name := target.Name()
target.Close()
os.Remove(name)
}()
stream := pipe.DecodeStream()
settings := make(map[string]any)
settings["threads"] = runtime.NumCPU()
settings["preset"] = "fast"
settings["profile"] = "high"
if encoder, err := NewEncoder(target, stream.Properties(), settings); err != nil {
t.Fatal(err)
} else {
defer encoder.Close()
s := stream.Copy(2)
encoded := 0
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
for range s[0].Channel() {
if encoded%10 == 0 {
t.Logf("frame %d/1253", encoded)
}
encoded++
}
}()
if err = encoder.EncodeStream(s[1]); err != nil {
t.Error(err)
}
wg.Wait()
if encoded != 1253 {
t.Fatalf("expected %d frames, got %d", 1253, encoded)
}
}
}
}