Add x264 encode test
This commit is contained in:
parent
499a43d61f
commit
ece3dfe96d
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue