mirror of
https://github.com/gen2brain/x264-go.git
synced 2024-09-10 09:31:13 +08:00
152 lines
2.6 KiB
Go
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)
|
|
}
|
|
}
|