x264-go/encode_test.go
2023-04-28 06:42:54 +02:00

152 lines
2.6 KiB
Go

package x264
import (
"bytes"
"image"
"image/color"
"image/draw"
"os"
"path/filepath"
"testing"
)
func TestEncode(t *testing.T) {
buf := bytes.NewBuffer(make([]byte, 0))
opts := &Options{
Width: 640,
Height: 480,
FrameRate: 25,
Tune: "zerolatency",
Preset: "veryfast",
Profile: "baseline",
LogLevel: LogDebug,
}
enc, err := NewEncoder(buf, opts)
if err != nil {
t.Fatal(err)
}
img := NewYCbCr(image.Rect(0, 0, opts.Width, opts.Height))
draw.Draw(img, img.Bounds(), image.Black, image.ZP, draw.Src)
for i := 0; i < opts.Width/2; i++ {
img.Set(i, opts.Height/2, color.RGBA{R: 255, A: 255})
err = enc.Encode(img)
if err != nil {
t.Error(err)
}
}
err = enc.Flush()
if err != nil {
t.Error(err)
}
err = enc.Close()
if err != nil {
t.Error(err)
}
err = os.WriteFile(filepath.Join(os.TempDir(), "test.264"), buf.Bytes(), 0644)
if err != nil {
t.Error(err)
}
}
func TestEncodeFlush(t *testing.T) {
buf := bytes.NewBuffer(make([]byte, 0))
opts := &Options{
Width: 640,
Height: 480,
FrameRate: 25,
Tune: "film",
Preset: "fast",
Profile: "high",
LogLevel: LogDebug,
}
enc, err := NewEncoder(buf, opts)
if err != nil {
t.Fatal(err)
}
img := NewYCbCr(image.Rect(0, 0, opts.Width, opts.Height))
draw.Draw(img, img.Bounds(), image.Black, image.ZP, draw.Src)
for i := 0; i < opts.Width/2; i++ {
img.Set(i, opts.Height/2, color.RGBA{R: 255, A: 255})
err = enc.Encode(img)
if err != nil {
t.Error(err)
}
}
err = enc.Flush()
if err != nil {
t.Error(err)
}
err = enc.Close()
if err != nil {
t.Error(err)
}
err = os.WriteFile(filepath.Join(os.TempDir(), "test.high.264"), buf.Bytes(), 0644)
if err != nil {
t.Error(err)
}
}
func TestEncodeCrf(t *testing.T) {
buf := bytes.NewBuffer(make([]byte, 0))
opts := &Options{
Width: 640,
Height: 480,
FrameRate: 25,
Tune: "zerolatency",
Preset: "veryfast",
Profile: "baseline",
RateControl: "crf",
RateConstant: 18,
LogLevel: LogDebug,
}
enc, err := NewEncoder(buf, opts)
if err != nil {
t.Fatal(err)
}
img := NewYCbCr(image.Rect(0, 0, opts.Width, opts.Height))
draw.Draw(img, img.Bounds(), image.Black, image.ZP, draw.Src)
for i := 0; i < opts.Width/2; i++ {
img.Set(i, opts.Height/2, color.RGBA{R: 255, A: 255})
err = enc.Encode(img)
if err != nil {
t.Error(err)
}
}
err = enc.Flush()
if err != nil {
t.Error(err)
}
err = enc.Close()
if err != nil {
t.Error(err)
}
err = os.WriteFile(filepath.Join(os.TempDir(), "test.crf.264"), buf.Bytes(), 0644)
if err != nil {
t.Error(err)
}
}